@digitransit-component/digitransit-component-autosuggest 7.1.3 → 7.1.4

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,3 +1,3 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("prop-types"),require("react"),require("react-i18next"),require("classnames"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/get"),require("downshift"),require("@digitransit-component/digitransit-component-icon"),require("i18next"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("luxon"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal"),require("@digitransit-component/digitransit-component-suggestion-item")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","classnames","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/get","downshift","@digitransit-component/digitransit-component-icon","i18next","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","luxon","react-modal","@digitransit-component/digitransit-component-dialog-modal","@digitransit-component/digitransit-component-suggestion-item"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.PropTypes,e.React,e.reactI18next,e.cx,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.get,e.downshift,e.Icon,e.i18next,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.luxon,e.ReactModal,e.DialogModal,e.SuggestionItem)}(this,function(e,t,u,n,o,r,i,a,s,l,c,d,p,g,f,h,b,E,A,m,y,F,D){"use strict";function C(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=C(t),B=C(u),v=C(o),S=C(r),k=C(i),w=C(a),x=C(s),O=C(l),j=C(c),M=C(d),P=C(g),R=C(b),I=C(E),L=C(A),N=C(y),q=C(F),z=C(D);function T(e){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},T(e)}function H(e){var t=function(e,t){if("object"!=T(e)||!e)return e;var u=e[Symbol.toPrimitive];if(void 0!==u){var n=u.call(e,t||"default");if("object"!=T(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==T(t)?t:t+""}function U(e,t,u){return(t=H(t))in e?Object.defineProperty(e,t,{value:u,enumerable:!0,configurable:!0,writable:!0}):e[t]=u,e}function V(e,t){return e&&t&&e===t}const G=["stop","station","favouriteStop","favouriteStation"],W=["favouriteVehicleRentalStation","bikestation"];function $(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function Q(e,t){const u=e.properties,n=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=u.origin,t=u.destination,o=n.origin,r=n.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${o.name}//${o.localadmin}//${r.name}//${r.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if(W.includes(u.layer)&&W.includes(n.layer)){return(u.gid||$(u.labelId))===(n.gid||$(n.labelId))}if(u.gtfsId&&n.gtfsId)return u.gtfsId===n.gtfsId;if(G.includes(u.layer)&&G.includes(n.layer)&&u.gid&&n.gid)return u.gid===n.gid;const o=e&&e.geometry?e.geometry.coordinates:void 0,r=t&&t.geometry?t.geometry.coordinates:void 0;return!!(o&&r&&Math.abs(o[0]-r[0])<1e-6&&Math.abs(o[1]-r[1])<1e-6&&(V(u.name,n.name)||V(u.label,n.label)||V(u.address,n.address)||V(u.address,n.label)||V(u.label,n.address)))}const K=e=>x.default(e)?e.toLowerCase():"",X=e=>e.split(/([A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{105C0}-\u{105F3}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10940}-\u{10959}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10D4A}-\u{10D65}\u{10D6F}-\u{10D85}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10EC2}-\u{10EC7}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11380}-\u{11389}\u{1138B}\u{1138E}\u{11390}-\u{113B5}\u{113B7}\u{113D1}\u{113D3}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11BC0}-\u{11BE0}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11DB0}-\u{11DDB}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{13460}-\u{143FA}\u{14400}-\u{14646}\u{16100}-\u{1611D}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16D40}-\u{16D6C}\u{16E40}-\u{16E7F}\u{16EA0}-\u{16EB8}\u{16EBB}-\u{16ED3}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{16FF2}\u{16FF3}\u{17000}-\u{18CD5}\u{18CFF}-\u{18D1E}\u{18D80}-\u{18DF2}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E5D0}-\u{1E5ED}\u{1E5F0}\u{1E6C0}-\u{1E6DE}\u{1E6E0}-\u{1E6E2}\u{1E6E4}\u{1E6E5}\u{1E6E7}-\u{1E6ED}\u{1E6F0}-\u{1E6F4}\u{1E6FE}\u{1E6FF}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B81D}\u{2B820}-\u{2CEAD}\u{2CEB0}-\u{2EBE0}\u{2EBF0}-\u{2EE5D}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{33479}]+)/u),Z=e=>/^[0-9]+[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{105C0}-\u{105F3}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10940}-\u{10959}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10D4A}-\u{10D65}\u{10D6F}-\u{10D85}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10EC2}-\u{10EC7}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11380}-\u{11389}\u{1138B}\u{1138E}\u{11390}-\u{113B5}\u{113B7}\u{113D1}\u{113D3}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11BC0}-\u{11BE0}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11DB0}-\u{11DDB}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{13460}-\u{143FA}\u{14400}-\u{14646}\u{16100}-\u{1611D}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16D40}-\u{16D6C}\u{16E40}-\u{16E7F}\u{16EA0}-\u{16EB8}\u{16EBB}-\u{16ED3}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{16FF2}\u{16FF3}\u{17000}-\u{18CD5}\u{18CFF}-\u{18D1E}\u{18D80}-\u{18DF2}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E5D0}-\u{1E5ED}\u{1E5F0}\u{1E6C0}-\u{1E6DE}\u{1E6E0}-\u{1E6E2}\u{1E6E4}\u{1E6E5}\u{1E6E7}-\u{1E6ED}\u{1E6F0}-\u{1E6F4}\u{1E6FE}\u{1E6FF}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B81D}\u{2B820}-\u{2CEAD}\u{2CEB0}-\u{2EBE0}\u{2EBF0}-\u{2EE5D}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{33479}]+$/u.test(e),J="back",Y="currentPosition",ee="favouriteStop",te="favouriteStation",ue="favouritePlace",ne="favouriteRoute",oe="favouriteVehicleRentalStation",re="futureRoute",ie="station",ae="selectFromMap",se="ownLocations",le="stop",ce="bikestation",de="carpark",pe="bikepark",ge=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,fe=(e,t)=>{switch(e){case Y:return 1;case J:return.9;case ae:return.8;case se:return.79;case te:case ue:case ee:case ne:case oe:return.45;case re:return.44;case ie:return x.default(t)&&0===t.indexOf("gtfs")?.43:.42;case de:case pe:case ce:return.38;case le:return.36;default:return.41}},he=(e,t,u="")=>{if(!Array.isArray(t)||!t.length)return t;const n=t=>x.default(t)&&e&&e.test(t),o=K(u),r=n(o),i=O.default(t.filter(e=>e),[e=>r&&n(K(e.properties.shortName))&&0===K(e.properties.shortName).indexOf(o)?1:0,e=>{const{confidence:t,layer:u,source:n}=e.properties;if(0===o.length)return fe(u,n);if(!t)return fe(u,n)+((e,t)=>x.default(e)&&0!==e.length?["name","label","address","shortName"].map(e=>({name:e,value:t[e]})).filter(e=>x.default(e.value)&&e.value.length>0).map(t=>{let u=K(t.value);return 0===u.indexOf(e)?("shortName"===t.name&&Z(u)&&([u]=X(u)),.5+e.length/u.length):.5*e.length/(e.length+1)}).reduce((e,t)=>t>e?t:e,0):0)(o,e.properties);switch(u){case ie:return t+(0===n.indexOf("gtfs")?.02:.01);case le:case de:case pe:return t-.05;case ce:return t-.04;default:return t}},e=>{if(e.properties.shortName)return Z(e.properties.shortName)?X(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return Z(e.properties.shortName)?X(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return j.default(i,Q)},be=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function Ee(e,t,u){if("string"==typeof t&&t.length>0){const n=t.toLowerCase().trim(),o=n.includes(" ")||n.includes(",");return e.filter(e=>{let t=[];u.forEach(u=>{let n=M.default(e,u);o||"properties.label"!==u&&"address"!==u||!n||(n=n.split(","),n.length>2?n.splice(n.length-2,2):n.length>1&&n.splice(n.length-1,1),n=n.join(",")),n&&(t=o?t.concat(n.toLowerCase()):t.concat(n.toLowerCase().replace(/,/g," ").split(" ")))});for(let e=0;e<t.length;e++)if(0===t[e].indexOf(n))return!0;return!1})}return e}function Ae(e,t){return e?Object.keys(e).map(u=>{const n=t||u,o=e[u];return"object"==typeof o?Ae(o,n):`${encodeURIComponent(n)}=${encodeURIComponent(o)}`}).join("&"):""}const me=require("axios").default;function ye(e,t){return me.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+Ae(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)}function Fe(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function De(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?Fe(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):Fe(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}function Ce(e,t,u,n,o,r,i,a){const s=e?e.trim():null;if(null==s||s.length<1||i&&!i.test(s))return Promise.resolve([]);const l=r||"https://api.digitransit.fi/geocoding/v1/search";let c=De(De(De({text:s},t),n),{},{lang:u});if(o&&(c=De(De({},c),{},{sources:o})),a){const e=a.toString();c=De(De({},c),{},{layers:e})}return ye(l,c).then(e=>e.features)}function _e(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function Be(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?_e(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):_e(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}function ve(e,t){if(!e||e.length<1)return Promise.resolve([]);let u="";const n=e.map(e=>{const t="stop"===e.type?"stop":"station";let n=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(n+=`#${e.code}`),u+=`${n},`,Be(Be({},e),{},{gid:n})}).reduce(function(e,t){return e[t.gid]=t,e},{});return ye(t,{ids:u.slice(0,-1)}).then(e=>e.features.map(e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:n[e.properties.gid].gid,code:n[e.properties.gid].code,gtfsId:n[e.properties.gid].gtfsId,lastUpdated:n[e.properties.gid].lastUpdated,favouriteId:n[e.properties.gid].favouriteId,address:e.properties.label,layer:ge(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))}function Se(e,t,u){let n=Ee(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return u&&(n=n.filter(e=>!u.includes(e.properties.layer))),Promise.resolve(w.default(n,10).map(e=>{const t=Be(Be({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t}))}const ke=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],we=["venue","address","street"],xe=["carpark","bikepark"],Oe=["stop","station"];const je=S.default(function(e,t,u,n,o,r,{input:i},a,s,l){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:g,parkingAreaSources:f,getLanguage:h,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:E,getFavouriteVehicleRentalStations:A,getFavouriteRoutesQuery:m,getFavouriteRoutes:y,getRoutesQuery:F,context:D,isPeliasLocationAware:C,minimalRegexp:_,lineRegexp:B,URL_PELIAS:v,URL_PELIAS_PLACE:S,feedIDs:x,geocodingSearchParams:O,geocodingSources:j,getFutureRoutes:M,cityBikeNetworks:P}=n,R=!e||0===e.length,I=!t||0===t.length,L=c(D),N=[],q={type:"all",term:i,results:[]},z=h(D),T=C&&null!=l&&l.lat&&null!=l&&l.lon?{"focus.point.lat":l.lat.toFixed(3),"focus.point.lon":l.lon.toFixed(3)}:{},H=u?u.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==L.status&&N.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(i,L)),(R||e.includes("MapPosition"))&&N.push(function(e){return"string"!=typeof e||0===e.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([])}(i)),e.includes("FutureRoutes")){const e=M(D);N.push(w.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if((null==t?void 0:t.length)>0)return!0;const u=e.getFavouriteVehicleRentalStations(e.context);if((null==u?void 0:u.length)>0)return!0;const n=e.getFavouriteStops(e.context);return(null==n?void 0:n.length)>0}(n)&&N.push(function(e){return"string"!=typeof e||0===e.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([])}(i)),R||e.includes("Locations")){const u=O;if(t.includes("Favourite")){const e=d(D);N.push(function(e,t){return Promise.resolve(Ee(e,t,["address","name"]).map(e=>({type:"FavouritePlace",properties:Be(Be({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}})))}(e,i)),t.includes("Back")&&N.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(I||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),N.push(Ce(i,u,z,T,j.join(","),v,_,t))}if(I||t.includes("History")){const e=p(D,"endpoint"),t=["bikestation"];t.push(...Oe),t.push(...ke),t.push(...xe),N.push(Se(e,i,t))}}if(R||e.includes("ParkingAreas")){if(I||t.includes("Datasource")){const e=O;r&&10!==r&&(e.size=r);const t=["carpark","bikepark"],u=f?f.join(","):null;N.push(Ce(i,e,z,T,u,v,_,t).then(e=>o?o(e,H):e))}if(I||t.includes("History")){const e=p(D),t=["bikestation"];t.push(...Oe),t.push(...ke),t.push(...we),N.push(Se(e,i,t))}}const U=e.includes("Stops"),V=e.includes("Stations");if(R||U||V){if(t.includes("Favourite")){const e=g(D);let t;t=e.every(e=>"station"===e.type)?ve(e,S).then(e=>o?o(e,H):e):b(e).then(e=>ve(e,S)).then(e=>o?o(e,H):e),N.push(function(e,t,u,n){return e.then(e=>Ee(e.filter(e=>"stop"===e.type?u:n),t,["properties.name","properties.name","properties.address"]))}(t,i,U,V))}if(I||t.includes("Datasource")){const t=[];U&&t.push("stop"),V&&t.push("station");const u=r&&10!==r?{size:r}:{};O&&O["boundary.country"]&&(u["boundary.country"]=O["boundary.country"]),(R||e.includes("Locations"))&&(u.dedupestops=1);const n=x.map(e=>`gtfs${e}`).join(",");N.push(Ce(i,u,z,T,n,v,_,t).then(e=>o?o(e,H):e))}if(I||t.includes("History")){const e=p(D).filter(e=>!e.properties.gid||e.properties.gid.includes("GTFS:")),t=["bikestation"];t.push(...ke),t.push(...we),t.push(...xe),U||t.push("stop"),V||t.push("station"),u?N.push(Se(e,i,t).then(e=>o?o(e,H):e)):N.push(Se(e,i,t))}}if(R||e.includes("Routes")){if(t.includes("Favourite")){const e=y(D);N.push(m(e,i,H,s).then(e=>o?o(e,H,"Routes"):e))}if(N.push(F(i,x,u,s).then(e=>o?o(e,H,"Routes"):e)),I||t.includes("History")){const e=p(D),t=["bikestation"];u&&t.push(...ke.filter(e=>!(e===u))),t.push(...Oe),t.push(...we),t.push(...xe),N.push(Se(e,i,t).then(e=>o?o(e,H,"Routes"):e))}}if(R||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=A(D);N.push(E(e,i))}if(I||t.includes("Datasource")){const e=["bikestation"],t=r&&10!==r?{size:r}:{};N.push(Ce(i,t,z,T,P.join(","),v,_,e).then(e=>o?o(e,H,"VehicleRentalStations"):e))}if(I||t.includes("History")){const e=p(D),t=[...Oe];t.push(...ke),t.push(...we),t.push(...xe),N.push(Se(e,i,t))}}Promise.all(N).then(k.default).then(e=>{q.results=e}).catch(e=>{q.error=e}).then(()=>{a(Be(Be({},q),{},{results:he(B,q.results,i)}))})},300,{leading:!0}),Me=f.createInstance({fallbackLng:"fi",resources:{de:{translation:{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:{translation:{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-bikepark":"Search bike parks","stop-near-you-bus":"Search bus routes or stops","stop-near-you-carpark":"Search car parks","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:{translation:{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äpysäköinti",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","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-bikepark":"Hae pyöräparkkia","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-carpark":"Hae autoparkkia","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:{translation:{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:{translation:{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-bikepark":"Sök cykelparkering","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-carpark":"Sök anslutningsparkering","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"}}},defaultNS:"translation",react:{useSuspense:!0}});function Pe(e,t){void 0===t&&(t={});var u=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===u&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}Me.init();var Re={container:"styles_container__CyBuz",input:"styles_input__x7Oye",favourite:"styles_favourite__xn1Du",thin:"styles_thin__ToA7-",hasValue:"styles_hasValue__qkIFF",suggestionsContainerOpen:"styles_suggestionsContainerOpen__1odqA",suggestionsContainer:"styles_suggestionsContainer__-FUbj",suggestionsList:"styles_suggestionsList__e-mac",suggestion:"styles_suggestion__oCpdb",suggestionHighlighted:"styles_suggestionHighlighted__vdJIb","autosuggest-input-container":"styles_autosuggest-input-container__C4ks3",origin:"styles_origin__J6GD2",destination:"styles_destination__yOA4k","stop-route-station":"styles_stop-route-station__ofvbR","autosuggest-input-icon":"styles_autosuggest-input-icon__-XA83","origin-stop-near-you":"styles_origin-stop-near-you__Vq9IO","clear-input":"styles_clear-input__KFeWb","sr-only":"styles_sr-only__FIitE"};Pe('input[type=text] {\n margin: 0;\n}\n\n.styles_container__CyBuz {\n display: flex;\n width: 100%;\n}\n.styles_container__CyBuz .styles_input__x7Oye.styles_favourite__xn1Du {\n padding-left: 47px;\n}\n.styles_container__CyBuz .styles_input__x7Oye.styles_thin__ToA7- {\n height: 34px;\n}\n.styles_container__CyBuz .styles_input__x7Oye {\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 -webkit-appearance: none;\n appearance: none;\n}\n.styles_container__CyBuz .styles_input__x7Oye:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: 0 0 2px 1px var(--hover-color);\n}\n@media screen and (min-width: 768px) {\n .styles_container__CyBuz .styles_input__x7Oye {\n font-size: 15px;\n height: 44px;\n padding-left: 49px;\n }\n}\n.styles_container__CyBuz .styles_input__x7Oye::-webkit-input-placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n.styles_container__CyBuz .styles_input__x7Oye::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n\n.styles_hasValue__qkIFF {\n color: #333;\n}\n\n.styles_suggestionsContainerOpen__1odqA {\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(2.625rem + 9px);\n z-index: 20;\n}\n\n.styles_suggestionsContainer__-FUbj {\n background-color: white;\n z-index: 20;\n}\n.styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white;\n}\n.styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac li:hover {\n background: #f2f5f7;\n}\n\n.styles_suggestion__oCpdb {\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 z-index: 20;\n}\n\n.styles_suggestionHighlighted__vdJIb {\n background-color: #f2f5f7;\n}\n\n.styles_autosuggest-input-container__C4ks3 {\n position: relative;\n width: 100%;\n}\n.styles_autosuggest-input-container__C4ks3.styles_origin__J6GD2 {\n z-index: 16;\n}\n.styles_autosuggest-input-container__C4ks3.styles_destination__yOA4k {\n z-index: 10;\n}\n.styles_autosuggest-input-container__C4ks3.styles_stop-route-station__ofvbR {\n z-index: 9;\n}\n\n.styles_autosuggest-input-icon__-XA83 {\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}\n.styles_autosuggest-input-icon__-XA83 svg {\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_origin__J6GD2 svg {\n fill: #4ea700;\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_destination__yOA4k svg {\n fill: #ec5188;\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_stop-route-station__ofvbR svg, .styles_autosuggest-input-icon__-XA83.styles_favourite__xn1Du svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_origin-stop-near-you__Vq9IO svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\n\nbutton.styles_clear-input__KFeWb {\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}\nbutton.styles_clear-input__KFeWb svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.styles_clear-input__KFeWb: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}\nbutton.styles_clear-input__KFeWb:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.styles_clear-input__KFeWb:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.styles_sr-only__FIitE:not(:focus, :active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}');const Ie=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Le=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Ne=R.default((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return u=e.name,n=e.address,[u||n&&n.split(",")[0],"string"==typeof n?n.replace(new RegExp(`${I.default(u)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[e.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!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${I.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],Ie(e)]:[e.name,e.id,Le(e),Ie(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Ie(e)]}var u,n},(e,t)=>{const u=L.default(e);return u.plain=t,u});const qe=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},ze=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,Te=(e,t,u)=>{if(!u)return;if(!e||!e.GTFS.platform)return;const{modes:n,platform:o}=e.GTFS;return[n&&"RAIL"===n[0]?u("track",{lng:t}):u("platform",{lng:t}),o]};function He(e,t,u){if(!u)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",u("select-from-map",{lng:t})];if("CurrentLocation"===e.type)return["",u("use-own-position",{lng:t})];if("SelectFromOwnLocations"===e.type)return["",u("select-from-own-locations",{lng:t})];let o,[r,i]=Ne(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=u("vehiclerentalstation",{lng:t});return[o,r,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=u("bikepark",{lng:t}),[o,r,void 0,void 0];if("carpark"===e.properties.layer)return o=u("carpark",{lng:t}),[o,r,void 0,void 0];if(e.properties.mode)o=u(e.properties.mode.toLowerCase().replace("favourite",""),{lng:t});else{o=u(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:t})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var n;const a=Le(e.properties),s=null===(n=e.properties.addendum)||void 0===n?void 0:n.GTFS.modes,l=Te(e.properties.addendum,t,u);return[o,be(r,a),i,a,s,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:u,code:n}=e.properties;return[o,u?be(u.split(",")[0],n):r,i,n,void 0,Te(e.properties.addendum,t)]}return[o,r,i]}const{origin:o,destination:r}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",a=r.locality?`, ${r.locality}`:"",s=o.name,l=r.name;return[u("future-route",{lng:t}),`${u("origin",{lng:t})} ${s}${i} ${u("destination",{lng:t})} ${l}${a}`,e.translatedText]}function Ue(e,t,u){if(!u)return;const n=m.DateTime.fromSeconds(Number(e.properties.time)),o=m.DateTime.now();let r=e.properties.arriveBy?u("arrival",{lng:t}):u("departure",{lng:t});return r=n.hasSame(o,"day")?`${r} ${u("today-at")}`:n.hasSame(o.plus({days:1}),"day")?`${r} ${u("tomorrow-at",{lng:t})}`:`${r} ${n.toFormat("ccc d.L.")}`,r=`${r} ${n.toFormat("HH:mm")}`,r}const Ve=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=Ne(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return t[1]||t[0];case"favouriteVehicleRentalStation":case"favouritePlace":return t[0];default:return t.length>1&&""!==t[1]?t.join(", "):t[1]||t[0]}}(e.properties),Ge=({suggestions:e,t:t,lng:u})=>{let n=[];const o=e[0];return o&&(o.type&&o.type.includes("Favourite")&&n.push(t("favourite",{lng:u})),n=n.concat(He(e[0],u))),[...new Set(n)].join(" - ")};function We(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var $e,Qe={exports:{}};
2
- /*! For license information please see index.js.LICENSE.txt */var Ke=($e||($e=1,function(e){var t;"undefined"!=typeof self&&self,e.exports=(t=B.default,function(){var e={888:function(e,t,u){var n,o;o=void 0!==u.g?u.g:"undefined"!=typeof window?window:this,n=function(){return function(e){var t={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},u=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var u in t){if(!t.hasOwnProperty(u))return;e[u]=t[u]}}),e},n=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,u=String(e),n=u.length,o=-1,r="",i=u.charCodeAt(0);++o<n;){if(0===(t=u.charCodeAt(o)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");r+=t>=1&&t<=31||127==t||0===o&&t>=48&&t<=57||1===o&&t>=48&&t<=57&&45===i?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?u.charAt(o):"\\"+u.charAt(o)}return"#"+r},o=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},r=function(t){return t?(u=t,parseInt(e.getComputedStyle(u).height,10)+t.offsetTop):0;var u},i=function(t,u,n){0===t&&document.body.focus(),n||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,u))},a=function(t,u,n,o){if(u.emitEvents&&"function"==typeof e.CustomEvent){var r=new CustomEvent(t,{bubbles:!0,detail:{anchor:n,toggle:o}});document.dispatchEvent(r)}};return function(s,l){var c,d,p,g,f={cancelScroll:function(e){cancelAnimationFrame(g),g=null,e||a("scrollCancel",c)},animateScroll:function(n,s,l){f.cancelScroll();var d=u(c||t,l||{}),h="[object Number]"===Object.prototype.toString.call(n),b=h||!n.tagName?null:n;if(h||b){var E=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var A,m,y,F=r(p),D=h?n:function(t,u,n,r){var i=0;if(t.offsetParent)do{i+=t.offsetTop,t=t.offsetParent}while(t);return i=Math.max(i-u-n,0),r&&(i=Math.min(i,o()-e.innerHeight)),i}(b,F,parseInt("function"==typeof d.offset?d.offset(n,s):d.offset,10),d.clip),C=D-E,_=o(),B=0,v=function(e,t){var u=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&u>t.durationMax?t.durationMax:t.durationMin&&u<t.durationMin?t.durationMin:parseInt(u,10)}(C,d),S=function(t){A||(A=t),B+=t-A,y=E+C*function(e,t){var u;return"easeInQuad"===e.easing&&(u=t*t),"easeOutQuad"===e.easing&&(u=t*(2-t)),"easeInOutQuad"===e.easing&&(u=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(u=t*t*t),"easeOutCubic"===e.easing&&(u=--t*t*t+1),"easeInOutCubic"===e.easing&&(u=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(u=t*t*t*t),"easeOutQuart"===e.easing&&(u=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(u=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(u=t*t*t*t*t),"easeOutQuint"===e.easing&&(u=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(u=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(u=e.customEasing(t)),u||t}(d,m=(m=0===v?0:B/v)>1?1:m),e.scrollTo(0,Math.floor(y)),function(t,u){var o=e.pageYOffset;if(t==u||o==u||(E<u&&e.innerHeight+o)>=_)return f.cancelScroll(!0),i(n,u,h),a("scrollStop",d,n,s),A=null,g=null,!0}(y,D)||(g=e.requestAnimationFrame(S),A=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,u){t||history.pushState&&u.updateURL&&history.pushState({smoothScroll:JSON.stringify(u),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(n,h,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?i(n,Math.floor(D),!1):(a("scrollStart",d,n,s),f.cancelScroll(!0),e.requestAnimationFrame(S))}}},h=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(s))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var u,o;try{u=n(decodeURIComponent(d.hash))}catch(e){u=n(d.hash)}if("#"===u){if(!c.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(u);(o=o||"#top"!==u?o:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var u=e.location.hash;u=u||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:u||e.pageYOffset},document.title,u||e.location.href)}}(c),f.animateScroll(o,d))}},b=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(n(history.state.anchor)))||f.animateScroll(t,null,{updateURL:!1})}};return f.destroy=function(){c&&(document.removeEventListener("click",h,!1),e.removeEventListener("popstate",b,!1),f.cancelScroll(),c=null,d=null,p=null,g=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";f.destroy(),c=u(t,l||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",h,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),f}}(o)}.apply(t,[]),void 0===n||(e.exports=n)},432:function(e,t,u){var n=this&&this.__createBinding||(Object.create?function(e,t,u,n){void 0===n&&(n=u),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[u]}})}:function(e,t,u,n){void 0===n&&(n=u),e[n]=t[u]}),o=this&&this.__exportStar||function(e,t){for(var u in e)"default"===u||Object.prototype.hasOwnProperty.call(t,u)||n(t,e,u)};Object.defineProperty(t,"__esModule",{value:!0}),o(u(47),t),o(u(926),t),o(u(349),t),o(u(137),t),o(u(729),t),o(u(383),t),o(u(450),t),o(u(358),t),o(u(753),t),o(u(869),t),o(u(352),t),o(u(446),t),o(u(164),t),o(u(305),t),o(u(502),t)},349:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var n=u(156);t.useArrowNavigation=function(e){var t=e.listItems,u=e.onArrowUpOrDown,o=(0,n.useState)(0),r=o[0],i=o[1],a=(0,n.useCallback)(function(e){i(e)},[t]),s=function(e){var n=e.key;if(null==t?void 0:t.length)if("ArrowUp"===n)u&&u(),e.preventDefault(),a(r>0?r-1:t.length-1);else{if("ArrowDown"!==n)return;u&&u(),e.preventDefault(),r<t.length-1?a(r+1):a(0)}};return(0,n.useEffect)(function(){return window.addEventListener("keydown",s),function(){return window.removeEventListener("keydown",s)}}),(0,n.useEffect)(function(){a(0)},[t]),{selectedIndex:r}}},446:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var n=u(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var u=(0,n.useState)(e),o=u[0],r=u[1];return(0,n.useEffect)(function(){var u=setTimeout(function(){r(e)},t);return function(){clearTimeout(u)}},[e,t]),o}},164:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var n=u(156);t.useElementSize=function(){var e,t,u=(0,n.useRef)(null);return[u,{width:null===(e=null==u?void 0:u.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==u?void 0:u.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var n=u(156);t.useIntersectionObserver=function(e){var t=(0,n.useRef)(null),u=(0,n.useState)(!1),o=u[0],r=u[1],i=function(e){var t=e[0];r(t.isIntersecting)};return(0,n.useEffect)(function(){if(window&&window.IntersectionObserver){var u=new IntersectionObserver(i,e),n=t.current;return t.current&&u.observe(t.current),function(){n&&u.unobserve(n)}}r(!1)},[t,e]),{containerRef:t,isVisible:o}},t.default=t.useIntersectionObserver},729:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var n=u(156),o=u(432),r={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?r[e]:e,u=(0,n.useState)(null),i=u[0],a=u[1],s=(0,n.useCallback)(function(){a(window.innerWidth)},[]);return(0,n.useEffect)(function(){s()},[]),(0,o.useOnResize)(s),i>=t},t.default=t.useIsBreakpoint},450:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var n=u(156);t.useIsLoadingAfterError=function(e,t){var u=(0,n.useState)(t),o=u[0],r=u[1];return(0,n.useEffect)(function(){e||r(t)},[e,t]),e&&o}},305:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var n=u(729);t.useIsMobile=function(){return!(0,n.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var n=u(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?n.useLayoutEffect:n.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var n=u(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,u=e.callback,o=e.watch;(0,n.useEffect)(function(){var e=function(){var e;if(o)return(null===(e=t.current)||void 0===e?void 0:e.matches(":focus-within"))?void 0:u()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}},[u,t,o])},t.default=t.useOnLoseFocusWithin},502:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var n=u(156);t.useOnResize=function(e){(0,n.useEffect)(function(){var t=function(){e(window.innerWidth)};return window.addEventListener("resize",t,{passive:!0}),function(){return window.removeEventListener("resize",t)}},[])},t.default=t.useOnResize},352:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var n=u(156);t.useOnWindowFocus=function(e){(0,n.useEffect)(function(){var t=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",t,!1),function(){return window.removeEventListener("visibilitychange",t)}},[e])}},47:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var n=u(156);t.useOutsideReacter=function(e,t){function u(u){e.current&&!e.current.contains(u.target)&&t()}(0,n.useEffect)(function(){return document.addEventListener("mousedown",u),function(){document.removeEventListener("mousedown",u)}})}},869:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var n=u(156);t.useRunAfterUpdate=function(){var e=(0,n.useRef)(null);return(0,n.useEffect)(function(){e.current&&(e.current(),e.current=null)}),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var n=u(156);t.useScrollLock=function(){return{lock:(0,n.useCallback)(function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e},[]),unlock:(0,n.useCallback)(function(){var e=document.body,t=e.style.top,u=-1*parseInt(t||"0");e.style.position="",e.style.top="",u&&window.scrollTo(0,-1*parseInt(t||"0"))},[])}}},358:function(e,t,u){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var o=u(156),r=n(u(888));t.useSmoothScroll=function(e){var t=(0,o.useRef)(null),u=e.ref,n=e.offset,i=void 0===n?0:n,a=e.speed,s=void 0===a?500:a;return(0,o.useEffect)(function(){t.current=new r.default(null,{speed:s,speedAsDuration:!0})},[]),(0,o.useCallback)(function(){u&&t.current&&t.current.animateScroll(u.current,null,{offset:function(){return i},updateURL:!1})},[i,u])}},156:function(e){e.exports=t}},u={};function n(t){var o=u[t];if(void 0!==o)return o.exports;var r=u[t]={exports:{}};return e[t].call(r.exports,r,r.exports,n),r.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(432)}())}(Qe)),Qe.exports),Xe=We(Ke),Ze={"fullscreen-root":"MobileSearch_fullscreen-root__l90DZ","combobox-container":"MobileSearch_combobox-container__UsUQ2","right-column":"MobileSearch_right-column__QT0kp","combobox-icon":"MobileSearch_combobox-icon__3syCw","combobox-label":"MobileSearch_combobox-label__mRQMF",container:"MobileSearch_container__JtL5q",input:"MobileSearch_input__Sjo1c","clear-input":"MobileSearch_clear-input__SGpE8",hasValue:"MobileSearch_hasValue__H1RPq",suggestion:"MobileSearch_suggestion__pqOkM",suggestionHighlighted:"MobileSearch_suggestionHighlighted__xpMMN",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__wwyZk",suggestionsList:"MobileSearch_suggestionsList__-pWWC","clear-search-history":"MobileSearch_clear-search-history__cO30c","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__bH39q","mobile-modal":"MobileSearch_mobile-modal__DFUUM","mobile-modal-content":"MobileSearch_mobile-modal-content__7q4zK"};Pe('input[type=text] {\n margin: 0;\n padding: 0;\n}\n\n.MobileSearch_fullscreen-root__l90DZ {\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\n.MobileSearch_combobox-container__UsUQ2 {\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}\n.MobileSearch_combobox-container__UsUQ2 .MobileSearch_right-column__QT0kp {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px;\n}\n\n.MobileSearch_combobox-icon__3syCw {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none;\n}\n.MobileSearch_combobox-icon__3syCw svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\n\n.MobileSearch_combobox-label__mRQMF {\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\n.MobileSearch_container__JtL5q {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c {\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 -webkit-appearance: none;\n appearance: none;\n}\n.MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n\nbutton.MobileSearch_clear-input__SGpE8 {\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}\nbutton.MobileSearch_clear-input__SGpE8 svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileSearch_clear-input__SGpE8:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__SGpE8:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__SGpE8:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_hasValue__H1RPq {\n color: #333;\n}\n\n.MobileSearch_suggestion__pqOkM {\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\n.MobileSearch_suggestionHighlighted__xpMMN {\n background-color: #f2f5f7;\n}\n\n.MobileSearch_suggestionsContainerOpen__wwyZk {\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}\n.MobileSearch_suggestionsContainerOpen__wwyZk .MobileSearch_suggestionsList__-pWWC {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7;\n}\n\n.MobileSearch_clear-search-history__cO30c {\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: #f2f5f7;\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_suggestionHighlighted__xpMMN .MobileSearch_clear-search-history__cO30c {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_mobile-modal-overlay__bH39q {\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\n.MobileSearch_mobile-modal__DFUUM {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileSearch_mobile-modal__DFUUM.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileSearch_mobile-modal__DFUUM.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\n\n.MobileSearch_mobile-modal-content__7q4zK {\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 Je={"fullscreen-root":"MobileNoScroll_fullscreen-root__fZbOA","combobox-container":"MobileNoScroll_combobox-container__9Q02x","right-column":"MobileNoScroll_right-column__Hk-62","combobox-icon":"MobileNoScroll_combobox-icon__WlXar","combobox-label":"MobileNoScroll_combobox-label__oeVbH",container:"MobileNoScroll_container__veReP",input:"MobileNoScroll_input__zo9Gg","clear-input":"MobileNoScroll_clear-input__lQlxs",hasValue:"MobileNoScroll_hasValue__1Gx3J",suggestion:"MobileNoScroll_suggestion__hTxDr",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__zxzXj",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__sX1RA",suggestionsList:"MobileNoScroll_suggestionsList__wXJTV","clear-search-history":"MobileNoScroll_clear-search-history__vR2Xw","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__Qw6Np","mobile-modal":"MobileNoScroll_mobile-modal__xYuHh","mobile-modal-content":"MobileNoScroll_mobile-modal-content__0Ft4g"};function Ye(e,t){if(null==e)return{};var u,n,o=function(e,t){if(null==e)return{};var u={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;u[n]=e[n]}return u}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)u=r[n],-1===t.indexOf(u)&&{}.propertyIsEnumerable.call(e,u)&&(o[u]=e[u])}return o}Pe('input[type=text] {\n margin: 0;\n padding: 0;\n}\n\n.MobileNoScroll_fullscreen-root__fZbOA {\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\n.MobileNoScroll_combobox-container__9Q02x {\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}\n.MobileNoScroll_combobox-container__9Q02x .MobileNoScroll_right-column__Hk-62 {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px;\n}\n\n.MobileNoScroll_combobox-icon__WlXar {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none;\n}\n.MobileNoScroll_combobox-icon__WlXar svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\n\n.MobileNoScroll_combobox-label__oeVbH {\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\n.MobileNoScroll_container__veReP {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg {\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 -webkit-appearance: none;\n appearance: none;\n}\n.MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n\nbutton.MobileNoScroll_clear-input__lQlxs {\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}\nbutton.MobileNoScroll_clear-input__lQlxs svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_hasValue__1Gx3J {\n color: #333;\n}\n\n.MobileNoScroll_suggestion__hTxDr {\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\n.MobileNoScroll_suggestionHighlighted__zxzXj {\n background-color: #f2f5f7;\n}\n\n.MobileNoScroll_suggestionsContainerOpen__sX1RA {\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}\n.MobileNoScroll_suggestionsContainerOpen__sX1RA .MobileNoScroll_suggestionsList__wXJTV {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7;\n}\n\n.MobileNoScroll_clear-search-history__vR2Xw {\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: #f2f5f7;\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_suggestionHighlighted__zxzXj .MobileNoScroll_clear-search-history__vR2Xw {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_mobile-modal-overlay__Qw6Np {\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\n.MobileNoScroll_mobile-modal__xYuHh {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\n\n.MobileNoScroll_mobile-modal-content__0Ft4g {\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\n.MobileNoScroll_suggestionsContainerOpen__sX1RA {\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n}\n.MobileNoScroll_suggestionsContainerOpen__sX1RA::-webkit-scrollbar {\n display: none; /* Safari and Chrome */\n}');const et=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],tt=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function ut(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function nt(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?ut(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):ut(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}function ot(e){let{item:t,lng:u,getItemProps:o,highlightedIndex:r,itemIndex:i,styles:a}=e,s=Ye(e,et);const[l]=n.useTranslation(),c="FutureRoute"===t.type?nt(nt({},t),{},{translatedText:Ue(t,u,l)}):t,d=He(t,u,l);return B.default.createElement("li",Object.assign({className:v.default(a.suggestion,r===i&&a.suggestionHighlighted)},o({index:i})),B.default.createElement(z.default,Object.assign({item:c,content:d,lng:u},s)))}const rt="production"!==process.env.NODE_ENV?_.default.shape({name:_.default.string,type:_.default.string,address:_.default.string,selectedIconId:_.default.string,iconColor:_.default.string,translatedText:_.default.string,properties:_.default.shape({layer:_.default.string,color:_.default.string,localadmin:_.default.string,mode:_.default.string,id:_.default.string,source:_.default.string,arrowClicked:_.default.bool,destination:_.default.shape({name:_.default.string,localadmin:_.default.string}),origin:_.default.shape({name:_.default.string,localadmin:_.default.string})})}):{};function it(e){let{suggestions:t,getMenuProps:u,getItemProps:o,lng:r,styles:i,hidden:a,renderClearHistoryButton:s,handleClearHistory:l}=e,c=Ye(e,tt);const[d]=n.useTranslation();return B.default.createElement("div",{className:v.default(i.suggestionsContainerOpen,i.suggestionsContainer,a&&"hidden")},B.default.createElement("ul",Object.assign({className:i.suggestionsList},u()),t.map((e,t)=>B.default.createElement(ot,Object.assign({key:`${e.type}-${e.properties.gid||e.properties.name||e.properties.gtfsId}`,getItemProps:o,itemIndex:t,item:e,lng:r,styles:i},c))),s&&B.default.createElement("li",o({index:t.length}),B.default.createElement("button",{onClick:l,type:"button",className:i["clear-search-history"]},d("clear-search-history",{lng:r})))))}"production"!==process.env.NODE_ENV&&(ot.propTypes={item:rt.isRequired,lng:_.default.string.isRequired,getItemProps:_.default.func.isRequired,highlightedIndex:_.default.number.isRequired,itemIndex:_.default.number.isRequired,styles:_.default.objectOf(_.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(it.propTypes={suggestions:_.default.arrayOf(rt).isRequired,getMenuProps:_.default.func.isRequired,getItemProps:_.default.func.isRequired,lng:_.default.string.isRequired,styles:_.default.objectOf(_.default.string).isRequired,hidden:_.default.bool.isRequired,renderClearHistoryButton:_.default.bool,handleClearHistory:_.default.func}),it.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const at=({color:e,lng:t,clearInput:u,onKeyDown:o,styles:r})=>{const[i]=n.useTranslation();return B.default.createElement("button",{type:"button",className:r["clear-input"],onClick:u,"aria-label":i("clear-button-label",{lng:t}),onKeyDown:o},B.default.createElement(P.default,{img:"close",color:e}))};function st({id:e,lng:t,value:u,placeholder:n,required:o,getInputProps:r,getLabelProps:i,clearInput:a,ariaLabel:s,inputRef:l,styles:c,renderLabel:d,isMobile:p,inputClassName:g,transportMode:f,clearButtonColor:h,autoFocus:b,inputOnBlur:E}){return B.default.createElement("div",{className:c.container},d&&B.default.createElement("label",i({className:c["sr-only"],htmlFor:e}),s),B.default.createElement("input",Object.assign({"aria-label":s,autoFocus:b,placeholder:n,required:o,type:"text",className:v.default(c.input,c[e],g,p&&f&&c.thin,u&&c.hasValue),value:u,id:e},r({ref:l,onBlur:E}))),u&&B.default.createElement(at,{lng:t,clearInput:()=>a(l),styles:c,color:h,onKeyDown:e=>qe(e)&&a(l)}))}function lt(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function ct(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?lt(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):lt(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}"production"!==process.env.NODE_ENV&&(at.propTypes={color:_.default.string.isRequired,lng:_.default.string.isRequired,clearInput:_.default.func.isRequired,onKeyDown:_.default.func.isRequired,styles:_.default.objectOf(_.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(st.propTypes={id:_.default.string.isRequired,lng:_.default.string.isRequired,placeholder:_.default.string.isRequired,required:_.default.bool.isRequired,value:_.default.string.isRequired,getInputProps:_.default.func.isRequired,getLabelProps:_.default.func.isRequired,clearInput:_.default.func.isRequired,ariaLabel:_.default.string.isRequired,inputRef:_.default.shape({current:_.default.oneOfType([_.default.string,_.default.object])}).isRequired,styles:_.default.objectOf(_.default.string).isRequired,renderLabel:_.default.bool,isMobile:_.default.bool.isRequired,inputClassName:_.default.string.isRequired,transportMode:_.default.string,clearButtonColor:_.default.string.isRequired,autoFocus:_.default.bool,inputOnBlur:_.default.func}),st.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const dt=({appElement:e,id:t,placeholder:o,clearInput:r,onSelectedItemChange:i,fontWeights:a,clearOldSearches:s,suggestionProps:l,lng:c,ariaProps:d,value:g,inputClassName:f,required:h,mobileLabel:b,showScroll:E,state:A,dispatch:m,colors:y})=>{const[F]=n.useTranslation(),{lock:D,unlock:C}=Xe.useScrollLock(),_=E?Ze:Je,v=`${t}-input`,S=`${t}-label`,[k,w]=u.useState(!1),x=B.default.useRef();u.useEffect(()=>{N.default.setAppElement(e)},[]),u.useEffect(()=>{A.renderMobile?D():C()},[A.renderMobile]);const{highlightedIndex:O,getLabelProps:j,getMenuProps:M,getInputProps:R,getItemProps:I,setHighlightedIndex:L}=p.useCombobox({items:A.suggestions,inputValue:g,isOpen:!0,onSelectedItemChange:e=>{i(e),m({type:"TOGGLE_MENU",isMobile:!0})},inputId:v,labelId:S,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e})=>A.renderMobile&&m({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:t,type:u})=>{switch(u){case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return L(-1),m({type:"TOGGLE_MENU",isMobile:!0}),e;case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return A.loading?(m({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?ct(ct({},t),{},{selectedItem:A.suggestions[0]}):t;case p.useCombobox.stateChangeTypes.InputBlur:return e;default:return t}},itemToString:e=>e?Ve(e):""});j({},{suppressRefError:!0}),M({},{suppressRefError:!0}),R({},{suppressRefError:!0}),I({index:-1},{suppressRefError:!0});const{ariaRequiredText:z,SearchBarId:T,ariaCurrentSuggestion:H}=d,U=z.concat(" ").concat(T).concat(" ").concat(H);return B.default.createElement(N.default,{isOpen:A.renderMobile,className:_["mobile-modal"],overlayClassName:_["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},B.default.createElement("div",{className:_["mobile-modal-content"],style:{"--color":y.primary,"--accessible-primary-color":y.accessiblePrimary,"--hover-color":y.hover,"--font-weight-medium":a.medium}},B.default.createElement("div",{className:_["combobox-container"],htmlFor:v},B.default.createElement("button",{type:"button",className:_["combobox-icon"],onClick:()=>{L(-1),m({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{qe(e)&&(L(-1),m({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":F("cancel",{lng:c}),tabIndex:0},B.default.createElement(P.default,{img:"arrow",color:y.primary})),B.default.createElement("span",{className:_["right-column"]},B.default.createElement("span",Object.assign({className:_["combobox-label"],id:S},j()),b),B.default.createElement(st,{placeholder:ze(t)?F("address-place-or-business",{lng:c}):o,id:t,lng:c,value:g,getInputProps:R,getLabelProps:j,clearInput:()=>r(x),ariaLabel:U,inputRef:x,styles:_,renderLabel:!1,clearButtonColor:y.primary,autoFocus:!0,inputClassName:f,required:h,isMobile:!0}),B.default.createElement(it,Object.assign({suggestions:A.suggestions,getMenuProps:M,getItemProps:I,highlightedIndex:O,isOpen:!0,hidden:!1,lng:c,styles:_,renderClearHistoryButton:!0,handleClearHistory:()=>w(!0)},l)))),B.default.createElement(q.default,{appElement:e,isModalOpen:k,handleClose:()=>w(!1),headerText:F("delete-old-searches-header",{lng:c}),primaryButtonText:F("delete",{lng:c}),secondaryButtonText:F("cancel",{lng:c}),primaryButtonOnClick:()=>{s(),w(!1)},secondaryButtonOnClick:()=>w(!1),colors:y,fontWeights:a,lang:c})))};function pt(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function gt(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):pt(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}"production"!==process.env.NODE_ENV&&(dt.propTypes={appElement:_.default.string.isRequired,id:_.default.string.isRequired,clearInput:_.default.func.isRequired,clearOldSearches:_.default.func.isRequired,onSelectedItemChange:_.default.func.isRequired,value:_.default.string.isRequired,colors:_.default.objectOf(_.default.string).isRequired,fontWeights:_.default.shape({medium:_.default.number.isRequired}).isRequired,suggestionProps:_.default.shape({}).isRequired,ariaProps:_.default.shape({ariaRequiredText:_.default.string.isRequired,SearchBarId:_.default.string.isRequired,ariaCurrentSuggestion:_.default.string.isRequired}).isRequired,inputClassName:_.default.string.isRequired,placeholder:_.default.string.isRequired,mobileLabel:_.default.string.isRequired,required:_.default.bool.isRequired,showScroll:_.default.bool.isRequired,lng:_.default.string.isRequired,state:_.default.shape({suggestions:_.default.arrayOf(_.default.shape({})).isRequired,renderMobile:_.default.bool.isRequired,loading:_.default.bool.isRequired}).isRequired,dispatch:_.default.func.isRequired});const ft=(e,t)=>{switch(t.type){case"INPUT_CHANGE":return gt(gt({},e),{},{value:t.value});case"FETCH_SUGGESTIONS":return gt(gt({},e),{},{loading:t.loading,suggestions:t.suggestions||e.suggestions});case"CLEAR_SUGGESTIONS":return gt(gt({},e),{},{suggestions:[]});case"RESET_SOURCES":return gt(gt({},e),{},{sources:t.sources});case"SET_SOURCES":return gt(gt({},e),{},{showOwnPlaces:t.showOwnPlaces,sources:t.sources,pendingSelection:t.pendingSelection});case"CLEAR":return gt(gt({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return gt(gt({},e),{},{value:t.value||e.value,isCleared:!t.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return t.initialState;case"PENDING_ENTER":return gt(gt({},e),{},{enterPending:t.enterPending});case"TOGGLE_MENU":return t.isMobile?e.renderMobile?gt(gt({},e),{},{renderMobile:!1,isCleared:!1}):gt(gt({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):gt(gt({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:t.isMobile&&!e.renderMobile});default:return e}};function ht(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function bt(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?ht(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):ht(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}const Et=["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"];function At({appElement:e,id:t,placeholder:o,onSelect:r,icon:i,value:a,onClear:s,lang:l,getAutoSuggestIcons:c,handleViaPoints:d,focusChange:g,storeRef:f,isMobile:h,mobileLabel:b,inputClassName:E,translatedPlaceholder:A,required:m,ariaLabel:y,fontWeights:F,colors:D,modeSet:C,showScroll:_,isEmbedded:S,transportMode:k,targets:w,sources:x,geocodingSize:O,filterResults:j,searchContext:M,pathOpts:R,refPoint:I}){const[L]=n.useTranslation(),N={suggestions:[],loading:!1,sources:x,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:a,enterPending:!1,isMenuOpen:!1},[q,z]=u.useReducer(ft,N);u.useEffect(()=>z({type:"RESET",initialState:N}),[a]),u.useEffect(()=>z({type:"RESET_SOURCES",sources:x}),[x]);const T=u.useRef(t);u.useEffect(()=>{f&&f(T.current)},[T.current]);const H=u.useCallback(()=>{const e=!(null!=w&&w.length)||w.includes("Locations"),t=(({targets:e,isLocationSearch:t,isMobile:u,ownPlaces:n,sources:o})=>{const r=!(null!=e&&e.length);let i;return n?(i=["Locations"],(r||e.includes("Stops"))&&i.push("Stops"),(r||e.includes("Stations"))&&i.push("Stations"),(r||e.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):r||(i=[...e],!t||u||o.length&&!o.includes("Favourite")||i.push("SelectFromOwnLocations")),i})({targets:w,isLocationSearch:e,isMobile:h,ownPlaces:q.showOwnPlaces,sources:q.sources});((e,t,u,n,o,r,i,a,s,l)=>{a(null),je(e,t,u,n,o,r,i,a,s,l)})(t,q.sources?q.sources.filter(t=>!e||"Favourite"===!t||q.showOwnPlaces||h):q.sources,k,M,j,O,{input:q.value||""},e=>{if(null==e)return void z({type:"FETCH_SUGGESTIONS",loading:!0});const t=(e.results||[]).filter(e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>Date.now()/1e3).map(e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const t=bt({},e);return t.properties.labelId=L(e.properties.labelId,{lng:l}),t}return e});z({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:t})},R,I)},[q.value,q.sources,q.showOwnPlaces,w,k,M,j,O,h,l,R,I,t]),U=u.useCallback((e,u)=>{e&&(d?d(e,u):r(e,t),!g||h&&!S||g(),T.current&&T.current.blur())},[h]),V=e=>U(e.selectedItem,e.highlightedIndex),{isOpen:G,highlightedIndex:W,getLabelProps:$,getMenuProps:Q,getInputProps:K,getItemProps:X,selectItem:Z,openMenu:J,closeMenu:Y}=p.useCombobox({inputId:t,inputValue:q.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e})=>z({type:"INPUT_CHANGE",value:e}),stateReducer:u.useCallback((e,{type:t,changes:u})=>{switch(t){case p.useCombobox.stateChangeTypes.ItemClick:case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return q.loading?(z({type:"PENDING_ENTER",enterPending:!0}),e):u.selectedItem?"SelectFromOwnLocations"===u.selectedItem.type?(z({type:"SET_SOURCES",sources:["Favourite","Back"],showOwnPlaces:!0,pendingSelection:u.selectedItem.type}),e):"back"===u.selectedItem.type?(z({type:"SET_SOURCES",sources:x,showOwnPlaces:!1,pendingSelection:null}),e):u:u;case p.useCombobox.stateChangeTypes.InputClick:return Et.includes(a)?bt(bt({},u),{},{inputValue:"",isOpen:!0}):bt(bt({},u),{},{isOpen:!0});case p.useCombobox.stateChangeTypes.InputBlur:return u.selectedItem?bt(bt({},u),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):u;case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return bt(bt({},u),{},{inputValue:""});default:return u}},[q.loading,a,h]),items:q.suggestions,itemToString:e=>e?Ve(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!q.renderMobile&&z({type:"TOGGLE_MENU",isMobile:h})}}),ee=e=>{z({type:"CLEAR"}),s&&s(t),e.current&&e.current.focus(),J()};u.useEffect(()=>{(G||q.renderMobile)&&H(q.value)},[G,q.renderMobile,q.value,H]),u.useEffect(()=>{q.enterPending&&!q.loading&&(U(q.suggestions[0],0),Y())},[q.loading,q.pendingEnter,q.suggestions]);const te={loading:q.loading,isMobile:h,ariaFavouriteString:L("favourite",{lng:l}),fontWeights:F,getAutoSuggestIcons:c,colors:D,modeSet:C},{ariaCurrentSuggestion:ue,ariaRequiredText:ne,SearchBarId:oe,ariaLabelText:re}=(({id:e,ariaLabel:t,lng:u,t:n,isMobile:o,suggestions:r,value:i,required:a})=>{const s=e.replace("searchfield-",""),l=t||n(s,{lng:u}).replace("searchfield-","").concat("."),c=a?`${n("required",{lng:u})}.`:"",d=n(o?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:u}),p="origin"===e?n("search-autosuggest-label-move-to-destination",{lng:u}):"";return{SearchBarId:l,ariaRequiredText:c,ariaLabelText:d.concat(" ").concat(p),ariaSuggestionLen:n("search-autosuggest-len",{count:r.length,lng:u}),ariaCurrentSuggestion:Ge({suggestions:r,t:n,lng:u})||i?n("search-current-suggestion",{lng:u,selection:Ge({suggestions:r,t:n,lng:u}).toLowerCase()||i}):""}})({id:t,lng:l,t:L,isMobile:h,ariaLabel:y,suggestions:q.suggestions,value:q.value,required:m});return u.useEffect(()=>{q.renderMobile||G||z({type:"RESET",initialState:N})},[q.renderMobile,G]),B.default.createElement(B.default.Fragment,null,h&&B.default.createElement(dt,{placeholder:L(o,{lng:l}),fontWeights:F,clearOldSearches:()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:u}=M;e&&t&&(t(e),u&&u(e),H(q.value))},appElement:e,mobileLabel:b||L(t,{lng:l}),ariaProps:{ariaCurrentSuggestion:ue,SearchBarId:oe,ariaRequiredText:ne},id:t,lng:l,onSelectedItemChange:V,value:q.value,clearInput:ee,suggestionProps:te,showScroll:!!_,colors:D,inputClassName:E,required:m,state:q,dispatch:z}),B.default.createElement("div",{className:v.default(Re["autosuggest-input-container"],Re[t],q.renderMobile&&"hidden"),style:{"--color":D.primary,"--hover-color":D.hover}},i&&B.default.createElement("div",{className:v.default(Re["autosuggest-input-icon"],Re[t],E&&Re[`${E}-input-icon`]),"aria-label":ne.concat(" ").concat(oe).concat(" ").concat(L("search-autosuggest-label",{lng:l}))},B.default.createElement(P.default,{img:`${i}`})),B.default.createElement(st,{inputClassName:E,ariaLabel:ue.concat(" ").concat(ne).concat(" ").concat(oe).concat(" ").concat(re),id:t,lng:l,getInputProps:K,getLabelProps:$,selectItem:Z,value:q.value,clearInput:ee,inputRef:T,styles:Re,clearButtonColor:D.primary,placeholder:A||L(o,{lng:l}),required:m,transportMode:k,isMobile:h,inputOnBlur:()=>{z({isMobile:h,value:!h&&a,type:"INPUT_BLUR"}),h||z({type:"RESET",initialState:N})}}),B.default.createElement(it,Object.assign({hidden:!G||h,highlightedIndex:W,getItemProps:X,getMenuProps:Q,suggestions:q.suggestions,lng:l,styles:Re},te))))}"production"!==process.env.NODE_ENV&&(At.propTypes={appElement:_.default.string.isRequired,icon:_.default.string,id:_.default.string.isRequired,placeholder:_.default.string.isRequired,translatedPlaceholder:_.default.string,value:_.default.string,transportMode:_.default.string,geocodingSize:_.default.number,filterResults:_.default.func,searchContext:_.default.shape({URL_PELIAS:_.default.string,context:_.default.object,clearOldSearches:_.default.func,clearFutureRoutes:_.default.func}).isRequired,sources:_.default.arrayOf(_.default.string),targets:_.default.arrayOf(_.default.string),ariaLabel:_.default.string,onSelect:_.default.func.isRequired,onClear:_.default.func,storeRef:_.default.func,handleViaPoints:_.default.func,focusChange:_.default.func,lang:_.default.string,isMobile:_.default.bool,pathOpts:_.default.shape({routesPrefix:_.default.string,stopsPrefix:_.default.string}),mobileLabel:_.default.string,refPoint:_.default.shape({address:_.default.string,lat:_.default.number,lon:_.default.number}),inputClassName:_.default.string,fontWeights:_.default.shape({medium:_.default.number}),colors:_.default.objectOf(_.default.string),getAutoSuggestIcons:_.default.objectOf(_.default.func),required:_.default.bool,modeSet:_.default.string,showScroll:_.default.bool,isEmbedded:_.default.bool}),At.defaultProps={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,pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},colors:g.defaultColors,required:!1,modeSet:void 0,showScroll:!1,refPoint:{}};e.default=e=>B.default.createElement(n.I18nextProvider,{i18n:Me},B.default.createElement(At,e)),Object.defineProperty(e,"__esModule",{value:!0})});
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uL3NyYy91dGlscy9pMThuLmpzIiwiLi4vc3JjL3V0aWxzL3RyYW5zbGF0aW9ucy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Boc2wtZmkvaG9va3MvbGliL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCIuLi9zcmMvY29tcG9uZW50cy9TdWdnZXN0aW9ucy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0NsZWFyQnV0dG9uLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSW5wdXQuanMiLCIuLi9zcmMvY29tcG9uZW50cy9Nb2JpbGVWaWV3LmpzIiwiLi4vc3JjL3V0aWxzL3NlYXJjaFJlZHVjZXIuanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuXG5jb25zdCBndGZzU3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJywgJ2Zhdm91cml0ZVN0b3AnLCAnZmF2b3VyaXRlU3RhdGlvbiddO1xuY29uc3QgdmVoaWNsZVJlbnRhbExheWVycyA9IFsnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLCAnYmlrZXN0YXRpb24nXTtcblxuZnVuY3Rpb24gbGFiZWxJZFRvR2lkKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFydHMgPSBpZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBgY2l0eWJpa2VzJHtwYXJ0c1swXX06YmlrZXN0YXRpb246JHtwYXJ0c1sxXX1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxhZG1pbn0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxhZG1pbn1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxhZG1pbn0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxhZG1pbn1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuY29uc3Qgc3BsaXRTaG9ydE5hbWVBdExldHRlcnMgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oXFxwe0x9KykvdSk7XG59O1xuXG5jb25zdCB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMgPSBzdHIgPT4ge1xuICByZXR1cm4gL15bMC05XStcXHB7TH0rJC91LnRlc3Qoc3RyKTtcbn07XG5cbi8qKlxuICogTGF5ZXJUeXBlIGRlcGljdHMgdGhlIHR5cGUgb2YgdGhlIHBvaW50LW9mLWludGVyZXN0LlxuICovXG5jb25zdCBMYXllclR5cGUgPSB7XG4gIEFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgQmFjazogJ2JhY2snLFxuICBDdXJyZW50UG9zaXRpb246ICdjdXJyZW50UG9zaXRpb24nLFxuICBGYXZvdXJpdGVTdG9wOiAnZmF2b3VyaXRlU3RvcCcsXG4gIEZhdm91cml0ZVN0YXRpb246ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgRmF2b3VyaXRlUGxhY2U6ICdmYXZvdXJpdGVQbGFjZScsXG4gIEZhdm91cml0ZVJvdXRlOiAnZmF2b3VyaXRlUm91dGUnLFxuICBGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJyxcbiAgRnV0dXJlUm91dGU6ICdmdXR1cmVSb3V0ZScsXG4gIFN0YXRpb246ICdzdGF0aW9uJyxcbiAgU2VsZWN0RnJvbU1hcDogJ3NlbGVjdEZyb21NYXAnLFxuICBTZWxlY3RGcm9tT3duTG9jYXRpb25zOiAnb3duTG9jYXRpb25zJyxcbiAgU3RvcDogJ3N0b3AnLFxuICBTdHJlZXQ6ICdzdHJlZXQnLFxuICBWZW51ZTogJ3ZlbnVlJyxcbiAgVmVoaWNsZVJlbnRhbFN0YXRpb246ICdiaWtlc3RhdGlvbicsXG4gIENhclBhcms6ICdjYXJwYXJrJyxcbiAgQmlrZVBhcms6ICdiaWtlcGFyaycsXG59O1xuZXhwb3J0IGNvbnN0IGlzU3RvcCA9ICh7IGxheWVyLCB0eXBlIH0pID0+XG4gIGxheWVyID09PSAnc3RvcCcgfHxcbiAgbGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICB0eXBlID09PSAnc3RvcCcgfHxcbiAgdHlwZSA9PT0gJ2Zhdm91cml0ZVN0b3AnO1xuXG5jb25zdCBERUZBVUxUX1JPVVRFU19QUkVGSVggPSAnbGluamF0JztcbmNvbnN0IERFRkFVTFRfU1RPUFNfUFJFRklYID0gJ3B5c2FraXQnO1xuXG5leHBvcnQgY29uc3QgbWFwUm91dGUgPSAoaXRlbSwgcGF0aE9wdHMpID0+IHtcbiAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRzID0gcGF0aE9wdHMgfHwge307XG5cbiAgY29uc3Qgcm91dGVzUHJlZml4ID0gb3B0cy5yb3V0ZXNQcmVmaXggfHwgREVGQVVMVF9ST1VURVNfUFJFRklYO1xuICBjb25zdCBzdG9wc1ByZWZpeCA9IG9wdHMuc3RvcHNQcmVmaXggfHwgREVGQVVMVF9TVE9QU19QUkVGSVg7XG5cbiAgY29uc3QgbGluayA9IGAvJHtyb3V0ZXNQcmVmaXh9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgIGl0ZW0uZ3Rmc0lkLFxuICApfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQgKG1pbjogMCwgbWF4OiAxLjUpLiBUaGUgYmVzdCBtYXRjaCB3aWxsIHJldHVybiBhIG51bWJlciBvZiAxLjUuXG4gKiBXb3JzZSBtYXRjaGVzIHdpbGwgcmV0dXJuIDAgb3IgMC41LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWU6IHJlc3VsdFByb3BlcnRpZXNbbmFtZV0gfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoZWxlbWVudCA9PiBpc1N0cmluZyhlbGVtZW50LnZhbHVlKSAmJiBlbGVtZW50LnZhbHVlLmxlbmd0aCA+IDApXG4gICAgLm1hcChlbGVtZW50ID0+IHtcbiAgICAgIGxldCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemUoZWxlbWVudC52YWx1ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlbGVtZW50Lm5hbWUgPT09ICdzaG9ydE5hbWUnICYmXG4gICAgICAgICAgdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKG5vcm1hbGl6ZWRWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNob3J0TmFtZSBpcyBvZiBhIGNlcnRhaW4gZm9ybWF0IChlLmcuIDg5QSksIGl0IGlzIHRyZWF0ZWQgaGVyZVxuICAgICAgICAgIC8vIGFzIGlmIGl0IGhhZCB0aGUgbGVuZ3RoIG9mIHRoZSBudW1iZXJzIHdpdGggdGhlIGxldHRlcnMgcmVtb3ZlZC5cbiAgICAgICAgICAvLyBTbyB0aGUgbGVuZ3RoIG9mIDg5QSB3b3VsZCBiZSB0cmVhdGVkIGFzIDIuXG4gICAgICAgICAgW25vcm1hbGl6ZWRWYWx1ZV0gPSBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZ1bGwgbWF0Y2ggYXQgc3RhcnQuIFJldHVybiBtYXggcmVzdWx0IHdoZW4gbWF0Y2ggaXMgZnVsbCwgbm90IG9ubHkgcGFydGlhbFxuICAgICAgICByZXR1cm4gMC41ICsgbm9ybWFsaXplZFRlcm0ubGVuZ3RoIC8gbm9ybWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIGJlY2F1c2Ugb2YgZmlsdGVybWF0Y2hpbmd0b2lucHV0LCB3ZSBrbm93IHRoYXQgbWF0Y2ggb2NjdXJyZWQgc29tZXdoZXJlXG4gICAgICAvLyBkb24ndCBydW4gZmlsdGVybWF0Y2hpbmcgYWdhaW4gYnV0IGVzdGltYXRlIHJvdWdobHk6XG4gICAgICAvLyB0aGUgbG9uZ2VyIHRoZSBtYXRjaGluZyBzdHJpbmcsIHRoZSBiZXR0ZXIgY29uZmlkZW5jZSwgbWF4IGJlaW5nIDAuNVxuICAgICAgcmV0dXJuICgwLjUgKiBub3JtYWxpemVkVGVybS5sZW5ndGgpIC8gKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCArIDEpO1xuICAgIH0pXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT4gKGN1cnJlbnQgPiBwcmV2aW91cyA/IGN1cnJlbnQgOiBwcmV2aW91cyksXG4gICAgICAwLFxuICAgICk7XG59O1xuXG4vKipcbiAqIFJhbmtzIHRoZSByZXN1bHQgYmFzZWQgb24gaXRzIGxheWVyIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHRoZSBzb3VyY2UgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYXllclJhbmsgPSAobGF5ZXIsIHNvdXJjZSkgPT4ge1xuICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgY2FzZSBMYXllclR5cGUuQ3VycmVudFBvc2l0aW9uOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBMYXllclR5cGUuQmFjazpcbiAgICAgIHJldHVybiAwLjk7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU1hcDpcbiAgICAgIHJldHVybiAwLjg7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU93bkxvY2F0aW9uczpcbiAgICAgIHJldHVybiAwLjc5O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0YXRpb246XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUGxhY2U6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RvcDpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVSb3V0ZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjQ1O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZ1dHVyZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDQ7XG4gICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgaWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMC40MztcbiAgICAgIH1cbiAgICAgIHJldHVybiAwLjQyO1xuICAgIH1cbiAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICByZXR1cm4gMC4zNjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gdmVudWUsIGFkZHJlc3MsIHN0cmVldCwgcm91dGUteHh4XG4gICAgICByZXR1cm4gMC40MTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgcmVzdWx0cy4gT3JkZXJzIGFzIGZvbGxvd3M6XG4gKiAgLSBjdXJyZW50IHBvc2l0aW9uIGZpcnN0IGZvciBhbiBlbXB0eSBzZWFyY2hcbiAqICAtIG1hdGNoaW5nIHJvdXRlcyBmaXJzdFxuICogIC0gb3RoZXJ3aXNlIGJ5IGNvbmZpZGVuY2UsIGV4Y2VwdCB0aGF0OlxuICogICAgLSBib29zdCB3ZWxsIG1hdGNoaW5nIHN0YXRpb25zIChlc3BlY2lhbGx5IGZyb20gR1RGUylcbiAqICAgIC0gcmFuayBzdG9wcyBsb3dlciBhcyB0aGV5IHRlbmQgdG8gb2NjdXB5IG1vc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzXG4gKiAgLSBpdGVtcyB3aXRoIG5vIGNvbmZpZGVuY2UgKG9sZCBzZWFyY2hlcyBhbmQgZmF2b3JpdGVzKTpcbiAqICAgIC0gcmFuayBmYXZvdXJpdGVzIGJldHRlciB0aGFuIG9yZGluYXJ5IG9sZCBzZWFyY2hlc1xuICogICAgLSByYW5rIGZ1bGwgbWF0Y2ggYmV0dGVyIHRoYW4gcGFydGlhbCBtYXRjaFxuICogICAgLSByYW5rIG1hdGNoIGF0IG1pZGRsZSB3b3JkIGxvd2VyIHRoYW4gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZ1xuICogICAgLSByYW5rIGJpa2UgcmVudGFsIHN0YXRpb25zIGxvd2VyXG4gKiBAcGFyYW0geypbXX0gcmVzdWx0cyBUaGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZXJlIHJlY2VpdmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gdGVybSBUaGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZFxuICovXG5leHBvcnQgY29uc3Qgc29ydFNlYXJjaFJlc3VsdHMgPSAobGluZVJlZ2V4cCwgcmVzdWx0cywgdGVybSA9ICcnKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSB8fCAhcmVzdWx0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cy5maWx0ZXIociA9PiByKSxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldExheWVyUmFuayhsYXllciwgc291cmNlKSArXG4gICAgICAgICAgICBtYXRjaChub3JtYWxpemVkVGVybSwgcmVzdWx0LnByb3BlcnRpZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhcbiAgICAgICAgICAgIHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSxcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSlbMF1cbiAgICAgICAgICAgIDogcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMoXG4gICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpWzFdXG4gICAgICAgICAgICA6IHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICAgICdwcm9wZXJ0aWVzLmxvbmdOYW1lJyxcbiAgICBdLFxuICAgIFsnZGVzYycsICdkZXNjJywgJ2FzYycsICdhc2MnLCAnYXNjJ10sXG4gICk7XG5cbiAgcmV0dXJuIHVuaXFXaXRoKG9yZGVyZWRSZXN1bHRzLCBpc0R1cGxpY2F0ZSk7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBzdG9wJ3MgbmFtZSB3aXRob3V0IHN0b3AgY29kZSBmcm9tIGEgc3RvcCBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgc3RvcCdzIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9wQ29kZSBzdG9wIGNvZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdG9wTmFtZSA9IChuYW1lLCBzdG9wQ29kZSkgPT4ge1xuICBpZiAoXG4gICAgc3RvcENvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN0b3BDb2RlICE9PSBudWxsICYmXG4gICAgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgIT09IC0xXG4gICkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAtIDEpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufTtcbiIsImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGxpc3QgbWF0Y2hpbmcgdG8gaW5wdXQuXG4gKlxuICogQG5hbWUgZmlsdGVyTWF0Y2hpbmdUb0lucHV0XG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IExpc3QgY29udGFpbmluIG9iamVjdHMgZS5nKCAge1xuICogICAgICAgICB0eXBlOiAnRmVhdHVyZSdcbiAqICAgICAgICAgcHJvcGVydGllczoge1xuICogICAgICAgICAgIGxhYmVsOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgICBsYXllcjogJ2FkZHJlc3MnLFxuICogICAgICAgICAgIG5hbWU6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICB9LFxuICogICAgICAgICBnZW9tZXRyeTogeyBjb29yZGluYXRlczogW2xvbiwgbGF0XSB9LFxuICogICAgICAgfSwpXG4gKiBAcGFyYW0ge1N0cmluZ30gSW5wdXQgSW5wdXQgZ2l2ZW4gZm9yIGZpbHRlcmluZyB0aGUgbGlzdFxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIExpc3Qgb2YgZmllbGRzIHRoYXQgbGlzdCBpcyBmaWx0ZXJlZCBieSBlLmcgKFtwcm9wZXJ0aWVzLmxhYmVsLCBwcm9wZXJ0aWVzLm5hbWVdKVxuICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBBcnJheS5cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmZpbHRlck1hdGNoaW5nVG9JbnB1dChbe3R5cGU6IGZlYXR1cmUsIHByb3BlcnRpZXMgeyAuLi4gbmFtZTogdGVzdGFkZHJlc3M0IH0gLi4uIH1dLCAndGVzdGFkZHJlc3M0JywgJ3Byb3BlcnRpZXMubmFtZScpO1xuICogLy89IExpc3QgY29udGFpbmluZyBvYmplY3Qgd2l0aCBnaXZlbiBuYW1lLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQobGlzdCwgSW5wdXQsIGZpZWxkcykge1xuICBpZiAodHlwZW9mIElucHV0ID09PSAnc3RyaW5nJyAmJiBJbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5wdXQgPSBJbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aVdvcmQgPSBpbnB1dC5pbmNsdWRlcygnICcpIHx8IGlucHV0LmluY2x1ZGVzKCcsJyk7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgbGV0IHBhcnRzID0gW107XG4gICAgICBmaWVsZHMuZm9yRWFjaChwTmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldChpdGVtLCBwTmFtZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFtdWx0aVdvcmQgJiZcbiAgICAgICAgICAocE5hbWUgPT09ICdwcm9wZXJ0aWVzLmxhYmVsJyB8fCBwTmFtZSA9PT0gJ2FkZHJlc3MnKSAmJlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogZHJvcCBsYXN0IHBhcnRzIGkuZS4gY2l0eSBhbmQgbmVpZ2hib3VyaG9vZFxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobXVsdGlXb3JkKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKGlucHV0KSA9PT0gMCkge1xuICAgICAgICAgIC8vIGFjY2VwdCBtYXRjaCBvbmx5IGF0IHdvcmQgc3RhcnRcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5jb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJykuZGVmYXVsdDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIHJlZHUoXG4gICAgbWFwLFxuICAgIHN0b3BPclN0YXRpb24sXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucykge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzU3RhdGlvbnMgPT4ge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzdG9wc1N0YXRpb25zLmZpbHRlcihzID0+XG4gICAgICBzLnR5cGUgPT09ICdzdG9wJyA/IHVzZVN0b3BzIDogdXNlU3RhdGlvbnMsXG4gICAgKTtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGNhbmRpZGF0ZXMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuICAncm91dGUtRlVOSUNVTEFSJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbmNvbnN0IHN0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7IC8vIHNlYXJjaCBzdGF0aW9ucyBmcm9tIE9TTVxuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb2NvZGluZ1NvdXJjZXMuam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnByb3BlcnRpZXMuZ2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydGllcy5naWQuaW5jbHVkZXMoJ0dURlM6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICghdXNlU3RvcHMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZVN0YXRpb25zKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSkgOiByZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWy4uLnN0b3BMYXllcnNdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzc2UnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdGw7xnZSBad2lzY2hlbnppZWwgaGluenUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZsdWcnLFxuICAgICAgYXJyaXZhbDogJ0Fua3VuZnQnLFxuICAgICAgYmFjazogJ1p1csO8Y2snLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdMZWlocmFkLVN0YXRpb24nLFxuICAgICAgYnVzOiAnQnVzJyxcbiAgICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0zDtnNjaGVuJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdTdWNoaGlzdG9yaWUgbMO2c2NoZW4nLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1dvbGxlbiBTaWUgZGllIFN1Y2gtSGlzdG9yaWUgbMO2c2NoZW4/JyxcbiAgICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgICAgZGVzdGluYXRpb246ICdaaWVsJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdTdGFydCBlaW5nZWJlbi4nLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICAgIGZlcnJ5OiAnRsOkaHJlJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgICBsb2FkaW5nOiAnTGFkZW4uLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcmFpbDogJ1p1ZycsXG4gICAgICBzZWFyY2g6ICdTdWNoZScsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3VjaGUgYW5oYW5kIHZvbiBBZHJlc3NlIG9kZXIgT3J0c2FuZ2FiZScsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnWmllbG9ydCBlaW5nZWJlbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdLZWluIE9ydCBnZWZ1bmRlbi4nLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTdGFuZG9ydCBlcm1pdHRlbG4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdBa3R1ZWxsZSBBdXN3YWhsOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1N0cmHDn2UnLFxuICAgICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdIYWx0ZXN0ZWxsZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3VjaGUgTGVpaHJhZC1TdGF0aW9uZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTdWNoZSBTdGFkdGJhaG4tSGFsdGVzdGVsbGVuLVN1Y2hlJyxcbiAgICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICAgIHRyYW06ICdTdHJhw59lbmJhaG4nLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ0F1cyBlaWdlbmVuIEZhdm9yaXRlbiBhdXN3w6RobGVuJyxcbiAgICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgICAgd2hlcmU6ICdXb2hpbj8nLFxuICAgICAgcGxhY2U6ICdPcnQnLFxuICAgIH0sXG4gIH0sXG4gIGVuOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkZHJlc3MsIHBsYWNlIG9yIGJ1c2luZXNzJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdBZGQgdmlhIHBvaW50JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdGbGlnaHQnLFxuICAgICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgICAgYmFjazogJ0JhY2snLFxuICAgICAgYmlrZXBhcms6ICdQYXJrICYgUmlkZSBmb3IgYmlrZXMnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgICAgYnVzOiAnYnVzJyxcbiAgICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdDbGVhcicsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnQ2xlYXIgc2VhcmNoIGhpc3RvcnknLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZWFyY2ggaGlzdG9yeT8nLFxuICAgICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ0VudGVyIHlvdXIgb3JpZ2luLicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm91cml0ZScsXG4gICAgICBmZXJyeTogJ0ZlcnJ5JyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbScsXG4gICAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICAgIHJhaWw6ICdUcmFpbicsXG4gICAgICByZXF1aXJlZDogJ3JlcXVpcmVkIGZpZWxkJyxcbiAgICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU2VhcmNoIGJ5IGFkZHJlc3Mgb3IgcGxhY2UgbmFtZScsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTZWFyY2gnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU2VhcmNoIG9yaWdpbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdTdHJlZXQnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgICAgc3RvcDogJ1N0b3AnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU2VhcmNoIHN0b3BzIGFuZCByb3V0ZXMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYmlrZXBhcmsnOiAnU2VhcmNoIGJpa2UgcGFya3MnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1NlYXJjaCBidXMgcm91dGVzIG9yIHN0b3BzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnU2VhcmNoIGNhciBwYXJrcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU2VhcmNoIHRyYWluIHJvdXRlcyBvciBzdGF0aW9ucycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXMgYW5kIHN0b3Agc2VhcmNoJyxcbiAgICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgICAgdHJhbTogJ1RyYW0nLFxuICAgICAgdHJhY2s6ICdUcmFjaycsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1NlbGVjdCBwb3NpdGlvbiBmcm9tIG1hcCcsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcG9pbnQnLFxuICAgICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdPc29pdGUsIHBhaWtrYSB0YWkgeXJpdHlzJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgICAgYXJyaXZhbDogJ1BlcmlsbMOkJyxcbiAgICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgICB2ZWhpY2xlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgICBiaWtlcGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgICBidXM6ICdidXNzaScsXG4gICAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGvDtmludGknLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnVMOkbcOkbmhldGtpbmVuIHNpamFpbnRpJyxcbiAgICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnTMOkaHTDtmFpa2EnLFxuICAgICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgICBmZXJyeTogJ0xhdXR0YScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPbWF0IHBhaWthdCcsXG4gICAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcGxhdGZvcm06ICdMYWl0dXJpJyxcbiAgICAgIHJhaWw6ICdKdW5hJyxcbiAgICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICAgIHNlYXJjaDogJ0V0c2knLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ0hhZSBtw6TDpHLDpG5ww6TDpHTDpCwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdLYXRzbyB0dWxva3NldCB2aWVyZWlzZWx0w6QgTcOkw6Ryw6RucMOkw6QtdsOkbGlsZWhkZWx0w6QnLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N5w7Z0w6QgbMOkaHTDtnBhaWtrYScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnb2kgbGlzdGFzc2EgbnVvbGluw6RwcMOkaW1pbGzDpCBqYSB2YWxpdHNlIGVudGVyaWxsw6QuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdTecO2dMOkIHNpamFpbnRpIGphIG5hdmlnb2kgbGlzdGFzc2EgcHl5aGvDpGlzZW3DpGxsw6QuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXN0YScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICAgIHN0cmVldDogJ0thdHUnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICAgIHN0b3A6ICdQeXPDpGtraScsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdIYWUgcHnDtnLDpHBhcmtraWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ0hhZSBidXNzaWxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jYXJwYXJrJzogJ0hhZSBhdXRvcGFya2tpYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdIYWUga2F1cHVua2lwecO2csOkYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnSGFlIG1ldHJvbGluamFhIHRhaSBhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdIYWUgcmFpdGlvbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgICAndG9kYXktYXQnOiAndMOkbsOkw6RuIGtsbycsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnaHVvbWVubmEga2xvJyxcbiAgICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVmFsaXRzZSBvbWlzdGEgcGFpa29pc3RhJyxcbiAgICAgIHZlbnVlOiAnUGFpa2thJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgICB3aGVyZTogJ01pbm5lIG1lbm7DpMOkbj8nLFxuICAgICAgcGxhY2U6ICdQYWlra2EnLFxuICAgIH0sXG4gIH0sXG4gIHBsOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZHJlcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlcywgbWllanNjZSBsdWIgZmlybWEnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0RvZGFqIHB1bmt0IHBvxZtyZWRuaScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1phbWtuaWogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ090d8Ozcnogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnTG90JyxcbiAgICAgIGFycml2YWw6ICdQcnp5amF6ZCcsXG4gICAgICBiYWNrOiAnV3LDs8SHJyxcbiAgICAgIGJpa2VwYXJrOiAnUGFya3VqIGkgSmVkxbogZGxhIHJvd2Vyw7N3JyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhY2phIHJvd2Vyb3dhJyxcbiAgICAgIGJ1czogJ2F1dG9idXMnLFxuICAgICAgY2FuY2VsOiAnQW51bHVqJyxcbiAgICAgIGNhcnBhcms6ICdQYXJrdWogaSBKZWTFuicsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1d5Y3p5xZvEhycsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnV3ljennFm8SHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWEnLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnT2JlY25lIHBvxYJvxbxlbmllJyxcbiAgICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6XG4gICAgICAgICdDenkgbmEgcGV3bm8gY2hjZXN6IHd5Y3p5xZtjacSHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWE/JyxcbiAgICAgIGRlcGFydHVyZTogJ09kamF6ZCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ0NlbCcsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnV3Byb3dhZMW6IHN3w7NqIHB1bmt0IHBvY3rEhXRrb3d5LicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdXcHJvd2Fkxbogc3fDs2ogY2VsJyxcbiAgICAgIGZhdm91cml0ZTogJ1VsdWJpb25lJyxcbiAgICAgIGZlcnJ5OiAnUHJvbScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1ByenlzesWCYSB0cmFzYScsXG4gICAgICBvcmlnaW46ICdQb2N6xIV0ZWsnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1BvY3rEhXRlaycsXG4gICAgICBvd25sb2NhdGlvbnM6ICdXxYJhc25lIG1pZWpzY2EnLFxuICAgICAgbG9hZGluZzogJ8WBYWRvd2FuaWXigKYnLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICAgIHBsYXRmb3JtOiAnUGVyb24nLFxuICAgICAgcmFpbDogJ1BvY2nEhWcnLFxuICAgICAgcmVxdWlyZWQ6ICd3eW1hZ2FuZSBwb2xlJyxcbiAgICAgIHNlYXJjaDogJ1N6dWthaicsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3p1a2FqIHBvIGFkcmVzaWUgbHViIG5hendpZSBtaWVqc2NhJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N6dWthaicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N6dWthaiBjZWx1LCB0cmFzeSBsdWIgcHJ6eXN0YW5rdScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1dwcm93YWTFuiBwdW5rdCBkb2NlbG93eScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdXecWbd2lldGwgd3luaWtpIHcgc8SFc2llZG5pZWoga2FyY2llIOKAnkNlbOKAnScsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnQnJhayBsb2thbGl6YWNqaScsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdXeXN6dWthaiBwb2N6xIV0ZWssIGtvbmllYyBsdWIgcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1dwcm93YWTFuiBwdW5rdCBwb2N6xIV0a293eScsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1d5a3J5aiBsb2thbGl6YWNqxJknLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdNaWVqc2NlLCBsb2thbGl6YWNqYSBpIHByenlzdGFuZWsuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF3aWd1aiBwbyBsacWbY2llIHXFvHl3YWrEhWMgc3RyemHFgmVrIGkgd3liaWVyYWoga2xhd2lzemVtIEVudGVyLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnV3Byb3dhZMW6IGxva2FsaXphY2rEmSBpIG5hd2lndWogcG8gbGnFm2NpZSBnZXN0YW1pIHByemVzdXdhbmlhLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnUG8gd3licmFuaXUgbG9rYWxpemFjamkgcG9jesSFdGtvd2VqLCBhdXRvbWF0eWN6bmllIHByemVqZHppZXN6IGRvIHBvbGEgbWllanNjYSBkb2NlbG93ZWdvLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdEb3N0xJlwbmEgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqYScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9mZXcnOiAnRG9zdMSZcG5lIHPEhSB7e2NvdW50fX0gcHJvcG96eWNqZScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9vdGhlcic6ICdEb3N0xJlwbmUgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqaScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdPYmVjbnkgd3liw7NyOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1VsaWNhJyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdTdGFjamEnLFxuICAgICAgc3RvcDogJ1ByenlzdGFuZWsnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU3p1a2FqIHByenlzdGFua8OzdyBpIHRyYXMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU3p1a2FqIGxvdMOzdyBpIGxvdG5pc2snLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N6dWthaiB0cmFzIGF1dG9idXNvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTenVrYWogc3RhY2ppIHJvd2Vyw7N3IG1pZWpza2ljaCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N6dWthaiB0cmFzIGtvbGVqb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N6dWthaiB0cmFzIG1ldHJhIGkgcHJ6eXN0YW5rw7N3ICcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N6dWthaiB0cmFzIHRyYW13YWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ1d5c3p1a2l3YW5pZSBhdXRvYnVzw7N3IGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICd0b2RheS1hdCc6ICdkemnFmyBvJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdqdXRybyBvJyxcbiAgICAgIHRyYW06ICdUcmFtd2FqJyxcbiAgICAgIHRyYWNrOiAnVG9yJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1XFvHlqIG9iZWNuZWogbG9rYWxpemFjamknLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXeWJpZXJ6IG1pZWpzY2UgbmEgbWFwaWUnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnV3liaWVyeiB6IHfFgmFzbnljaCBtaWVqc2MnLFxuICAgICAgdmVudWU6ICdNaWVqc2NlJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnUHJ6ZXogcHVua3QnLFxuICAgICAgd2hlcmU6ICdEb2vEhWQ/JyxcbiAgICAgIHBsYWNlOiAnTWllanNjZScsXG4gICAgfSxcbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIHBsYXRzIGVsbGVyIGbDtnJldGFnJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICAgIGFycml2YWw6ICdBbmzDpG5kZXInLFxuICAgICAgYmFjazogJ1RpbGxiYWthJyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgICBidXM6ICdCdXNzaScsXG4gICAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgICAgY2FycGFyazogJ0luZmFydHNwYXJrZXJpbmcnLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUw7ZtJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ051dmFyYW5kZSBwb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnQXZnw6VuZ3N0aWQnLFxuICAgICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICAgIGZlcnJ5OiAnRsOkcmphJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnRnJhbXRpZGEgcnV0dCcsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ1Nrcml2IGluIGRpbiBhdmbDpHJkc3BsYXRzJyxcbiAgICAgIG9yaWdpbjogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICAgb3dubG9jYXRpb25zOiAnRWduYSBwbGF0c2VyJyxcbiAgICAgIGxvYWRpbmc6ICdMYWRkYXIuLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcGxhdGZvcm06ICdQbGF0dGZvcm0nLFxuICAgICAgcmFpbDogJ1TDpWcnLFxuICAgICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICAgIHNlYXJjaDogJ1PDtmsnLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1PDtmsgbWVkIGFkcmVzc2VuIGVsbGVyIHBsYXRzZW5zIG5hbW4nLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1PDtmsgZGVzdGluYXRpb24sIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTa3JpdiBkZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdTZSByZXN1bHRhdGVuIHVuZGVyIGZsaWtlbiBEZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnSW5nYSBzw7ZrcmVzdWx0YXQnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1Nrcml2IGF2ZsOkcmRzcGxhdHMnLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTw7ZrIHBvc2l0aW9uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdlcmEgbGlzdGFuIG1lZCBwaWx0YW5nZW50ZXJuYSBvY2ggdsOkbGogbWVkIEVudGVyLXRhbmdldGVuLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnQW5nZSBwbGF0c2VuIG9jaCBuYXZpZ2VyYSBpIGxpc3RhbiBnZW5vbSBhdHQgc3ZlcGEuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0hpdHRhZGUge3tjb3VudH19IGbDtnJzbGFnJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ051dmFyYW5kZSB2YWw6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnR2F0YScsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTw7ZrIGjDpWxscGxhdHNlciBlbGxlciBsaW5qZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU8O2ayBmbHlnIGVsbGVyIGZseWdwbGF0c2VyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJpa2VwYXJrJzogJ1PDtmsgY3lrZWxwYXJrZXJpbmcnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1PDtmsgYnVzc2xpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2FycGFyayc6ICdTw7ZrIGFuc2x1dG5pbmdzcGFya2VyaW5nJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1PDtmsgc3RhZHNjeWtlbHN0YXRpb25lcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1PDtmsgbsOkcnTDpWdlciBlbGxlciBzdGF0aW9uZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU8O2ayBzcMOlcnZhZ25saW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzcyBvY2ggc3RvcHAgc8O2a25pbmdlbicsXG4gICAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2kgbW9yZ29uJyxcbiAgICAgIHRyYW06ICdTcMOlcnZhZ24nLFxuICAgICAgdHJhY2s6ICdTcMOlcicsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1bDpGxqIHBvc2l0aW9uIGZyw6VuIGthcnRhbicsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgICAgdmVudWU6ICdNw7Z0ZXNwbGF0cycsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgICBwbGFjZTogJ1BsYXRzJyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGFkbWluIChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsYWRtaW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxhZG1pbiA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlc3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBpZiAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllclxuICAgICk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtcbiAgZ2V0TmFtZUxhYmVsLFxuICBnZXRTdG9wQ29kZSxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IHsgZ2V0U3RvcE5hbWUgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZ2V0TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IGNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQT0lTZWFyY2ggPSBpZCA9PlxuICBpZCA9PT0gJ29yaWdpbicgfHxcbiAgaWQgPT09ICdkZXN0aW5hdGlvbicgfHxcbiAgaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gIGlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG5leHBvcnQgY29uc3QgZ2V0UGxhdGZvcm0gPSAoYWRkZW5kdW0sIGxuZywgdCkgPT4ge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFhZGRlbmR1bSB8fCAhYWRkZW5kdW0uR1RGUy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgeyBtb2RlcywgcGxhdGZvcm0gfSA9IGFkZGVuZHVtLkdURlM7XG4gIGNvbnN0IHR5cGUgPVxuICAgIG1vZGVzICYmIG1vZGVzWzBdID09PSAnUkFJTCcgPyB0KCd0cmFjaycsIHsgbG5nIH0pIDogdCgncGxhdGZvcm0nLCB7IGxuZyB9KTtcbiAgcmV0dXJuIFt0eXBlLCBwbGF0Zm9ybV07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSwgbG5nLCB0KSB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXRlbS50eXBlICE9PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCdzZWxlY3QtZnJvbS1tYXAnLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCd1c2Utb3duLXBvc2l0aW9uJywgeyBsbmcgfSldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgIHJldHVybiBbJycsIHQoJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgICBsZXQgW25hbWUsIGxhYmVsXSA9IGdldE5hbWVMYWJlbChpdGVtLnByb3BlcnRpZXMsIHRydWUpO1xuICAgIGxldCBzdWdnZXN0aW9uVHlwZTtcbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXJlbnRhbCcpIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXN0YXRpb24nKVxuICAgICkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KCd2ZWhpY2xlcmVudGFsc3RhdGlvbicsIHsgbG5nIH0pO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgnYmlrZXBhcmsnLCB7IGxuZyB9KTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnY2FycGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgnY2FycGFyaycsIHsgbG5nIH0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubW9kZSkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICAgeyBsbmcgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdChsYXllciwgeyBsbmcgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmlkICYmXG4gICAgICAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RvcCcgfHwgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGdldFN0b3BDb2RlKGl0ZW0ucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBtb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtPy5HVEZTLm1vZGVzO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0sIGxuZywgdCk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSwgbG5nKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIHN0b05hbWUsIGxhYmVsLCBjb2RlLCB1bmRlZmluZWQsIHBsYXRmb3JtXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgbGFiZWxdO1xuICB9XG4gIGNvbnN0IHsgb3JpZ2luLCBkZXN0aW5hdGlvbiB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICBjb25zdCB0YWlsMSA9IG9yaWdpbi5sb2NhbGl0eSA/IGAsICR7b3JpZ2luLmxvY2FsaXR5fSBmb29iYXJgIDogJyc7XG4gIGNvbnN0IHRhaWwyID0gZGVzdGluYXRpb24ubG9jYWxpdHkgPyBgLCAke2Rlc3RpbmF0aW9uLmxvY2FsaXR5fWAgOiAnJztcbiAgY29uc3QgbmFtZTEgPSBvcmlnaW4ubmFtZTtcbiAgY29uc3QgbmFtZTIgPSBkZXN0aW5hdGlvbi5uYW1lO1xuICByZXR1cm4gW1xuICAgIHQoJ2Z1dHVyZS1yb3V0ZScsIHsgbG5nIH0pLFxuICAgIGAke3QoJ29yaWdpbicsIHsgbG5nIH0pfSAke25hbWUxfSR7dGFpbDF9ICR7dCgnZGVzdGluYXRpb24nLCB7XG4gICAgICBsbmcsXG4gICAgfSl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0sIGxuZywgdCkge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdGltZSA9IERhdGVUaW1lLmZyb21TZWNvbmRzKE51bWJlcihpdGVtLnByb3BlcnRpZXMudGltZSkpO1xuICBjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gdCgnYXJyaXZhbCcsIHsgbG5nIH0pXG4gICAgOiB0KCdkZXBhcnR1cmUnLCB7IGxuZyB9KTtcbiAgaWYgKHRpbWUuaGFzU2FtZShub3csICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5oYXNTYW1lKG5vdy5wbHVzKHsgZGF5czogMSB9KSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3QoJ3RvbW9ycm93LWF0JywgeyBsbmcgfSl9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dGltZS50b0Zvcm1hdCgnY2NjIGQuTC4nKX1gO1xuICB9XG4gIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdISDptbScpfWA7XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRTdWdnZXN0aW9uVmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgaWYgKFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBnZXRMYWJlbChzdWdnZXN0aW9uLnByb3BlcnRpZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KSA9PiB7XG4gIGxldCBsYWJlbCA9IFtdO1xuICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uc1swXTtcbiAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGxhYmVsLnB1c2godCgnZmF2b3VyaXRlJywgeyBsbmcgfSkpO1xuICAgIH1cbiAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudChzdWdnZXN0aW9uc1swXSwgbG5nKSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG59O1xuIiwiaW1wb3J0IHsgZ2V0TmFtZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0aWVzXG4gKlxuICogQG5hbWUgZ2V0TGFiZWxcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsdT1cIlwiLGk9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTt1Kz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PWk/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIrdX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0saT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciB1PW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh1KX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksaD1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLG09aHx8IW8udGFnTmFtZT9udWxsOm87aWYoaHx8bSl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgYixnLHcsRT11KGQpLE89aD9vOmZ1bmN0aW9uKHQsbixvLHUpe3ZhciBpPTA7aWYodC5vZmZzZXRQYXJlbnQpZG97aSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gaT1NYXRoLm1heChpLW4tbywwKSx1JiYoaT1NYXRoLm1pbihpLHIoKS1lLmlubmVySGVpZ2h0KSksaX0obSxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2J8fChiPXQpLEkrPXQtYix3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixnPShnPTA9PT1NPzA6SS9NKT4xPzE6ZyksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksaShvLG4saCkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksYj1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksYj10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLGgsZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz9pKG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LGg9ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0sbT1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDQzMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig0NyksdCkscihuKDkyNiksdCkscihuKDM0OSksdCkscihuKDEzNyksdCkscihuKDcyOSksdCkscihuKDM4MyksdCkscihuKDQ1MCksdCkscihuKDM1OCksdCkscihuKDc1MyksdCkscihuKDg2OSksdCkscihuKDM1MiksdCkscihuKDQ0NiksdCkscihuKDE2NCksdCkscihuKDMwNSksdCkscihuKDUwMiksdCl9LDM0OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksdT1yWzBdLGk9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtpKGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHModT4wP3UtMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHU8dC5sZW5ndGgtMT9zKHUrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDp1fX19LDQ0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDE2NDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSwxMzc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0sdT1uWzFdLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTt1KHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihpLGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fXUoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw3Mjk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDQzMiksdT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3VbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLGk9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLGk+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDUwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHx1KHQpfSksW2UsdF0pLGUmJnJ9fSwzMDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oNzI5KTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDM4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNzUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSw1MDI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSwzNTI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDg2OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSdW5BZnRlclVwZGF0ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlUnVuQWZ0ZXJVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19LHQuZGVmYXVsdD10LnVzZVJ1bkFmdGVyVXBkYXRlfSw5MjY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sMzU4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLHU9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsaT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IHUuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiBpfSx1cGRhdGVVUkw6ITF9KX0pLFtpLG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxvKSx1LmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oNDMyKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7XG4gIGlmIChudWxsID09IGUpIHJldHVybiB7fTtcbiAgdmFyIG8sXG4gICAgcixcbiAgICBpID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTtcbiAgfVxuICByZXR1cm4gaTtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IFN1Z2dlc3Rpb25JdGVtIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LXN1Z2dlc3Rpb24taXRlbSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge1xuICBnZXRTdWdnZXN0aW9uQ29udGVudCxcbiAgdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSxcbn0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5mdW5jdGlvbiBTdWdnZXN0aW9uKHtcbiAgaXRlbSxcbiAgbG5nLFxuICBnZXRJdGVtUHJvcHMsXG4gIGhpZ2hsaWdodGVkSW5kZXgsXG4gIGl0ZW1JbmRleCxcbiAgc3R5bGVzLFxuICAuLi5yZXN0XG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5ld0l0ZW0gPVxuICAgIGl0ZW0udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICB0cmFuc2xhdGVkVGV4dDogdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtLCBsbmcsIHQpLFxuICAgICAgICB9XG4gICAgICA6IGl0ZW07XG4gIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtLCBsbmcsIHQpO1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgc3R5bGVzLnN1Z2dlc3Rpb24sXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXggPT09IGl0ZW1JbmRleCAmJiBzdHlsZXMuc3VnZ2VzdGlvbkhpZ2hsaWdodGVkLFxuICAgICAgKX1cbiAgICAgIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogaXRlbUluZGV4IH0pfVxuICAgID5cbiAgICAgIDxTdWdnZXN0aW9uSXRlbSBpdGVtPXtuZXdJdGVtfSBjb250ZW50PXtjb250ZW50fSBsbmc9e2xuZ30gey4uLnJlc3R9IC8+XG4gICAgPC9saT5cbiAgKTtcbn1cbmNvbnN0IGl0ZW1TaGFwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdGVkSWNvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRyYW5zbGF0ZWRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwcm9wZXJ0aWVzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxheWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYXJyb3dDbGlja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkZXN0aW5hdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICB9KSxcbn0pO1xuXG5TdWdnZXN0aW9uLnByb3BUeXBlcyA9IHtcbiAgaXRlbTogaXRlbVNoYXBlLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGhpZ2hsaWdodGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgaXRlbUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gU3VnZ2VzdGlvbnMoe1xuICBzdWdnZXN0aW9ucyxcbiAgZ2V0TWVudVByb3BzLFxuICBnZXRJdGVtUHJvcHMsXG4gIGxuZyxcbiAgc3R5bGVzLFxuICBoaWRkZW4sXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbixcbiAgaGFuZGxlQ2xlYXJIaXN0b3J5LFxuICAuLi5yZXN0XG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4sXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lcixcbiAgICAgICAgaGlkZGVuICYmICdoaWRkZW4nLFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPHVsIGNsYXNzTmFtZT17c3R5bGVzLnN1Z2dlc3Rpb25zTGlzdH0gey4uLmdldE1lbnVQcm9wcygpfT5cbiAgICAgICAge3N1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U3VnZ2VzdGlvblxuICAgICAgICAgICAgICBrZXk9e2Ake3N1Z2dlc3Rpb24udHlwZX0tJHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMuZ2lkIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMuZ3Rmc0lkXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICBnZXRJdGVtUHJvcHM9e2dldEl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgaXRlbUluZGV4PXtpfVxuICAgICAgICAgICAgICBpdGVtPXtzdWdnZXN0aW9ufVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgICAge3JlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiAmJiAoXG4gICAgICAgICAgPGxpIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogc3VnZ2VzdGlvbnMubGVuZ3RoIH0pfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJIaXN0b3J5fVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdjbGVhci1zZWFyY2gtaGlzdG9yeScsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cblN1Z2dlc3Rpb25zLnByb3BUeXBlcyA9IHtcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKGl0ZW1TaGFwZSkuaXNSZXF1aXJlZCxcbiAgZ2V0TWVudVByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBoaWRkZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5TdWdnZXN0aW9ucy5kZWZhdWx0UHJvcHMgPSB7XG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogZmFsc2UsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogKCkgPT4gdW5kZWZpbmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIElucHV0IGNsZWFyIGJ1dHRvbiBlbGVtZW50XG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGVhckJ1dHRvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29sb3IgLy8gaGV4IGNvbG9yIHN0cmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGxuZyAvLyBsYW5ndWFnZSwgZWcuICdmaSdcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gY2xlYXJJbnB1dFxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBbb25LZXlEb3duXVxuICogQHBhcmFtIHtDbGVhckJ1dHRvblByb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5leHBvcnQgY29uc3QgQ2xlYXJCdXR0b24gPSAoeyBjb2xvciwgbG5nLCBjbGVhcklucHV0LCBvbktleURvd24sIHN0eWxlcyB9KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICBhcmlhLWxhYmVsPXt0KCdjbGVhci1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgID5cbiAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuQ2xlYXJCdXR0b24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQ2xlYXJCdXR0b24gfSBmcm9tICcuL0NsZWFyQnV0dG9uJztcbmltcG9ydCB7IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIElucHV0KHtcbiAgaWQsXG4gIGxuZyxcbiAgdmFsdWUsXG4gIHBsYWNlaG9sZGVyLFxuICByZXF1aXJlZCxcbiAgZ2V0SW5wdXRQcm9wcyxcbiAgZ2V0TGFiZWxQcm9wcyxcbiAgY2xlYXJJbnB1dCxcbiAgYXJpYUxhYmVsLFxuICBpbnB1dFJlZixcbiAgc3R5bGVzLFxuICByZW5kZXJMYWJlbCxcbiAgaXNNb2JpbGUsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICB0cmFuc3BvcnRNb2RlLFxuICBjbGVhckJ1dHRvbkNvbG9yLFxuICBhdXRvRm9jdXMsXG4gIGlucHV0T25CbHVyLFxufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgIHtyZW5kZXJMYWJlbCAmJiAoXG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIHsuLi5nZXRMYWJlbFByb3BzKHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzWydzci1vbmx5J10sXG4gICAgICAgICAgICBodG1sRm9yOiBpZCxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIHthcmlhTGFiZWx9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICApfVxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLWF1dG9mb2N1c1xuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICBzdHlsZXMuaW5wdXQsXG4gICAgICAgICAgaXNNb2JpbGUgJiYgdHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJycsXG4gICAgICAgICAgc3R5bGVzW2lkXSB8fCAnJyxcbiAgICAgICAgICB2YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnLFxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lLFxuICAgICAgICApfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgey4uLmdldElucHV0UHJvcHMoe1xuICAgICAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiBpbnB1dE9uQmx1cixcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgICAge3ZhbHVlICYmIChcbiAgICAgICAgPENsZWFyQnV0dG9uXG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgY2xlYXJJbnB1dD17KCkgPT4gY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgY29sb3I9e2NsZWFyQnV0dG9uQ29sb3J9XG4gICAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbklucHV0LnByb3BUeXBlcyA9IHtcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBnZXRJbnB1dFByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRMYWJlbFByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICByZW5kZXJMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhckJ1dHRvbkNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0T25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cbklucHV0LmRlZmF1bHRQcm9wcyA9IHtcbiAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgcmVuZGVyTGFiZWw6IGZhbHNlLFxuICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gIGlucHV0T25CbHVyOiAoKSA9PiB7fSxcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IGhvb2tzIGZyb20gJ0Boc2wtZmkvaG9va3MnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IHVzZUNvbWJvYm94IH0gZnJvbSAnZG93bnNoaWZ0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcbmltcG9ydCB7IFN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9TdWdnZXN0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vSW5wdXQnO1xuaW1wb3J0IHtcbiAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50LFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGlzUE9JU2VhcmNoLFxufSBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbi8qKlxuICogQHR5cGVkZWYgQXV0b3N1Z2dlc3RTdGF0ZVxuICogQHByb3BlcnR5IHthcnJheX0gc3VnZ2VzdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVuZGVyTW9iaWxlXG4gKlxuICogQHR5cGVkZWYgTW9iaWxlVmlld1Byb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwRWxlbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhY2Vob2xkZXJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNsZWFySW5wdXRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uU2VsZWN0ZWRJdGVtQ2hhbmdlXG4gKiBAcHJvcGVydHkge29iamVjdH0gZm9udFdlaWdodHNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNsZWFyT2xkU2VhcmNoZXNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBzdWdnZXN0aW9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBjb2xvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsbmdcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBhcmlhUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlucHV0Q2xhc3NOYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcXVpcmVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vYmlsZUxhYmVsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvd1Njcm9sbF1cbiAqIEBwcm9wZXJ0eSB7QXV0b3N1Z2dlc3RTdGF0ZX0gc3RhdGVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGRpc3BhdGNoXG4gKlxuICogQHBhcmFtIHtNb2JpbGVWaWV3UHJvcHN9IHByb3BzXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9XG4gKi9cbmNvbnN0IE1vYmlsZVZpZXcgPSAoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgcGxhY2Vob2xkZXIsXG4gIGNsZWFySW5wdXQsXG4gIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlLFxuICBmb250V2VpZ2h0cyxcbiAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgc3VnZ2VzdGlvblByb3BzLFxuICBsbmcsXG4gIGFyaWFQcm9wcyxcbiAgdmFsdWUsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICByZXF1aXJlZCxcbiAgbW9iaWxlTGFiZWwsXG4gIHNob3dTY3JvbGwsXG4gIHN0YXRlLFxuICBkaXNwYXRjaCxcbiAgY29sb3JzLFxufSkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcbiAgY29uc3QgW2lzRGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBSZWFjdE1vZGFsLnNldEFwcEVsZW1lbnQoYXBwRWxlbWVudCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgIGxvY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5sb2NrKCk7XG4gICAgfVxuICB9LCBbc3RhdGUucmVuZGVyTW9iaWxlXSk7XG5cbiAgLyoqXG4gICAqIGluZGVwZW5kZW50IGhvb2tzIGluIG1vYmlsZSB2aWV3LlxuICAgKiBpbnB1dFZhbHVlIGFuZCBzdWdnZXN0aW9uIHN0YXRlcyBhcmUga2VwdCBpbiB0aGUgcGFyZW50XG4gICAqL1xuICBjb25zdCB7XG4gICAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJbnB1dFByb3BzLFxuICAgIGdldEl0ZW1Qcm9wcyxcbiAgICBzZXRIaWdobGlnaHRlZEluZGV4LFxuICB9ID0gdXNlQ29tYm9ib3goe1xuICAgIGl0ZW1zOiBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICBpbnB1dFZhbHVlOiB2YWx1ZSxcbiAgICBpc09wZW46IHRydWUsXG4gICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U6IGNoYW5nZXMgPT4ge1xuICAgICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2UoY2hhbmdlcyk7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgIH0sXG4gICAgaW5wdXRJZCxcbiAgICBsYWJlbElkLFxuICAgIHNlbGVjdGVkSXRlbTogbnVsbCxcbiAgICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogLTEsXG4gICAgb25JbnB1dFZhbHVlQ2hhbmdlOiAoeyBpbnB1dFZhbHVlIH0pID0+XG4gICAgICBzdGF0ZS5yZW5kZXJNb2JpbGUgJiYgLy8gcHJldmVudCB1cGRhdGluZyB2YWx1ZSB3aGVuIHRoZSBzZWFyY2ggaXMgbm90IG9wZW5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ0lOUFVUX0NIQU5HRScsIHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgIHN0YXRlUmVkdWNlcjogKG9sZFN0YXRlLCB7IGNoYW5nZXMsIHR5cGUgfSkgPT4ge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25Fc2NhcGU6IHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4KC0xKTtcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRW50ZXI6XG4gICAgICAgICAgaWYgKHN0YXRlLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1BFTkRJTkdfRU5URVInLCBlbnRlclBlbmRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNlbGVjdCB0aGUgZmlyc3QgaXRlbSBpZiBub25lIGlzIGhpZ2hsaWdodGVkXG4gICAgICAgICAgaWYgKG9sZFN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHN0YXRlLnN1Z2dlc3Rpb25zWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgIC8vIGFsbG93cyB0YWJiaW5nIG91dCBvZiBpbnB1dCBmaWVsZCB3aXRob3V0IGNsb3NpbmdcbiAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0Qmx1cjoge1xuICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXRlbVRvU3RyaW5nKHN1Z2dlc3Rpb24pIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uID8gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pIDogJyc7XG4gICAgfSxcbiAgfSk7XG4gIC8vIGNhbGwgdG8gc3VwcHJlc3MgcmVmIGVycm9ycyBmcm9tIGRvd25zaGlmdFxuICBnZXRMYWJlbFByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG4gIGdldE1lbnVQcm9wcyh7fSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuICBnZXRJbnB1dFByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG4gIGdldEl0ZW1Qcm9wcyh7IGluZGV4OiAtMSB9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG5cbiAgY29uc3QgeyBhcmlhUmVxdWlyZWRUZXh0LCBTZWFyY2hCYXJJZCwgYXJpYUN1cnJlbnRTdWdnZXN0aW9uIH0gPSBhcmlhUHJvcHM7XG4gIGNvbnN0IGFyaWFMYWJlbCA9IGFyaWFSZXF1aXJlZFRleHRcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgIC5jb25jYXQoJyAnKVxuICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKTtcbiAgcmV0dXJuIChcbiAgICA8UmVhY3RNb2RhbFxuICAgICAgaXNPcGVuPXtzdGF0ZS5yZW5kZXJNb2JpbGV9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsJ119XG4gICAgICBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1vdmVybGF5J119XG4gICAgICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U9e2ZhbHNlfVxuICAgICAgc2hvdWxkQ2xvc2VPbkVzY1xuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1jb250ZW50J119XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBjb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBjb2xvcnMuYWNjZXNzaWJsZVByaW1hcnksXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBjb2xvcnMuaG92ZXIsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtaWNvbiddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4KC0xKTtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpKSB7XG4gICAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NhbmNlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwiYXJyb3dcIiBjb2xvcj17Y29sb3JzLnByaW1hcnl9IC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3JpZ2h0LWNvbHVtbiddfT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfVxuICAgICAgICAgICAgICBpZD17bGFiZWxJZH1cbiAgICAgICAgICAgICAgey4uLmdldExhYmVsUHJvcHMoKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge21vYmlsZUxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgICAgICBpc1BPSVNlYXJjaChpZClcbiAgICAgICAgICAgICAgICAgID8gdCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycsIHsgbG5nIH0pXG4gICAgICAgICAgICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICBnZXRJbnB1dFByb3BzPXtnZXRJbnB1dFByb3BzfVxuICAgICAgICAgICAgICBnZXRMYWJlbFByb3BzPXtnZXRMYWJlbFByb3BzfVxuICAgICAgICAgICAgICBjbGVhcklucHV0PXsoKSA9PiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgICAgICAgIGlucHV0UmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlckxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgY2xlYXJCdXR0b25Db2xvcj17Y29sb3JzLnByaW1hcnl9XG4gICAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8U3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N0YXRlLnN1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBnZXRNZW51UHJvcHM9e2dldE1lbnVQcm9wc31cbiAgICAgICAgICAgICAgZ2V0SXRlbVByb3BzPXtnZXRJdGVtUHJvcHN9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg9e2hpZ2hsaWdodGVkSW5kZXh9XG4gICAgICAgICAgICAgIGlzT3BlbiAvLyB3aGVuIG1vYmlsZSB2aWV3IGlzIG9wZW4gd2UgYWx3YXlzIHdhbnQgdG8gc2hvdyBzdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBoaWRkZW49e2ZhbHNlfVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvblxuICAgICAgICAgICAgICBoYW5kbGVDbGVhckhpc3Rvcnk9eygpID0+IHNldERpYWxvZ09wZW4odHJ1ZSl9XG4gICAgICAgICAgICAgIHsuLi5zdWdnZXN0aW9uUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgICAgaXNNb2RhbE9wZW49e2lzRGlhbG9nT3Blbn1cbiAgICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgICAgaGVhZGVyVGV4dD17dCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInLCB7IGxuZyB9KX1cbiAgICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17dCgnZGVsZXRlJywgeyBsbmcgfSl9XG4gICAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17dCgnY2FuY2VsJywgeyBsbmcgfSl9XG4gICAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXMoKTtcbiAgICAgICAgICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgICAgY29sb3JzPXtjb2xvcnN9XG4gICAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgICAgIGxhbmc9e2xuZ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3RNb2RhbD5cbiAgKTtcbn07XG5cbk1vYmlsZVZpZXcucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc3VnZ2VzdGlvblByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe30pLmlzUmVxdWlyZWQsXG4gIGFyaWFQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcmlhUmVxdWlyZWRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgU2VhcmNoQmFySWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdGF0ZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzdWdnZXN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHt9KSkuaXNSZXF1aXJlZCxcbiAgICByZW5kZXJNb2JpbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZGlzcGF0Y2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVWaWV3O1xuIiwiZXhwb3J0IGNvbnN0IHNlYXJjaFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnSU5QVVRfQ0hBTkdFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogYWN0aW9uLnZhbHVlLFxuICAgICAgfTtcbiAgICBjYXNlICdGRVRDSF9TVUdHRVNUSU9OUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZGluZzogYWN0aW9uLmxvYWRpbmcsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBhY3Rpb24uc3VnZ2VzdGlvbnMgfHwgc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgICB9O1xuICAgIGNhc2UgJ0NMRUFSX1NVR0dFU1RJT05TJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB9O1xuICAgIGNhc2UgJ1JFU0VUX1NPVVJDRVMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNvdXJjZXM6IGFjdGlvbi5zb3VyY2VzLFxuICAgICAgfTtcbiAgICBjYXNlICdTRVRfU09VUkNFUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2hvd093blBsYWNlczogYWN0aW9uLnNob3dPd25QbGFjZXMsXG4gICAgICAgIHNvdXJjZXM6IGFjdGlvbi5zb3VyY2VzLFxuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBhY3Rpb24ucGVuZGluZ1NlbGVjdGlvbixcbiAgICAgIH07XG4gICAgY2FzZSAnQ0xFQVInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgaXNDbGVhcmVkOiB0cnVlLFxuICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB9O1xuICAgIGNhc2UgJ0lOUFVUX0JMVVInOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdmFsdWU6IGFjdGlvbi52YWx1ZSB8fCBzdGF0ZS52YWx1ZSxcbiAgICAgICAgaXNDbGVhcmVkOiBhY3Rpb24uaXNNb2JpbGUgPyBmYWxzZSA6IHN0YXRlLmlzQ2xlYXJlZCxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgc2hvd093blBsYWNlczogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdSRVNFVCc6IHtcbiAgICAgIHJldHVybiBhY3Rpb24uaW5pdGlhbFN0YXRlO1xuICAgIH1cbiAgICBjYXNlICdQRU5ESU5HX0VOVEVSJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVudGVyUGVuZGluZzogYWN0aW9uLmVudGVyUGVuZGluZyxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1RPR0dMRV9NRU5VJzoge1xuICAgICAgaWYgKGFjdGlvbi5pc01vYmlsZSkge1xuICAgICAgICBpZiAoIXN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHJlbmRlck1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBzdGF0ZS5pc0NsZWFyZWQgPyAnJyA6IHN0YXRlLnZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICByZW5kZXJNb2JpbGU6IGZhbHNlLFxuICAgICAgICAgIGlzQ2xlYXJlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNNZW51T3BlbjogIXN0YXRlLmlzTWVudU9wZW4sXG4gICAgICAgIHJlbmRlck1vYmlsZTogYWN0aW9uLmlzTW9iaWxlICYmICFzdGF0ZS5yZW5kZXJNb2JpbGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlUmVkdWNlciB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciwgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGV4ZWN1dGVTZWFyY2ggfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlJztcbmltcG9ydCB7IHVzZUNvbWJvYm94IH0gZnJvbSAnZG93bnNoaWZ0JztcbmltcG9ydCBJY29uLCB7XG4gIGRlZmF1bHRDb2xvcnMsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi91dGlscy9pMThuJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9jb21wb25lbnRzL3N0eWxlcy5zY3NzJztcbmltcG9ydCB7IGdldFN1Z2dlc3Rpb25WYWx1ZSwgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgfSBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCBNb2JpbGVWaWV3IGZyb20gJy4vY29tcG9uZW50cy9Nb2JpbGVWaWV3JztcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnLi9jb21wb25lbnRzL0lucHV0JztcbmltcG9ydCB7IFN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9jb21wb25lbnRzL1N1Z2dlc3Rpb25zJztcbmltcG9ydCB7IHNlYXJjaFJlZHVjZXIgfSBmcm9tICcuL3V0aWxzL3NlYXJjaFJlZHVjZXInO1xuXG5jb25zdCBnZXRBcmlhUHJvcHMgPSAoe1xuICBpZCxcbiAgYXJpYUxhYmVsLFxuICBsbmcsXG4gIHQsXG4gIGlzTW9iaWxlLFxuICBzdWdnZXN0aW9ucyxcbiAgdmFsdWUsXG4gIHJlcXVpcmVkLFxufSkgPT4ge1xuICBjb25zdCBhcmlhQmFySWQgPSBpZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gIGNvbnN0IFNlYXJjaEJhcklkID1cbiAgICBhcmlhTGFiZWwgfHwgdChhcmlhQmFySWQsIHsgbG5nIH0pLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKS5jb25jYXQoJy4nKTsgLy8gRnVsbCBzdG9wIG1ha2VzIHNjcmVlbiByZWFkZXIgc3BlZWNoIGNsZWFyZXIuXG4gIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSByZXF1aXJlZCA/IGAke3QoJ3JlcXVpcmVkJywgeyBsbmcgfSl9LmAgOiAnJztcbiAgY29uc3QgYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zID0gaXNNb2JpbGVcbiAgICA/IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJywgeyBsbmcgfSlcbiAgICA6IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCcsIHsgbG5nIH0pO1xuICBjb25zdCBtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0ID1cbiAgICBpZCA9PT0gJ29yaWdpbidcbiAgICAgID8gdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nLCB7IGxuZyB9KVxuICAgICAgOiAnJztcbiAgY29uc3QgYXJpYUxhYmVsVGV4dCA9IGFyaWFMYWJlbEluc3RydWN0aW9uc1xuICAgIC5jb25jYXQoJyAnKVxuICAgIC5jb25jYXQobW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCk7XG5cbiAgY29uc3QgYXJpYVN1Z2dlc3Rpb25MZW4gPSB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJywge1xuICAgIGNvdW50OiBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgbG5nLFxuICB9KTtcblxuICBjb25zdCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gPVxuICAgIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KSB8fCB2YWx1ZVxuICAgICAgPyB0KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIGxuZyxcbiAgICAgICAgICBzZWxlY3Rpb246XG4gICAgICAgICAgICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCh7IHN1Z2dlc3Rpb25zLCB0LCBsbmcgfSkudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pXG4gICAgICA6ICcnO1xuXG4gIHJldHVybiB7XG4gICAgU2VhcmNoQmFySWQsXG4gICAgYXJpYVJlcXVpcmVkVGV4dCxcbiAgICBhcmlhTGFiZWxUZXh0LFxuICAgIGFyaWFTdWdnZXN0aW9uTGVuLFxuICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbixcbiAgfTtcbn07XG5cbmNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgJ1ZhbGl0dHUgc2lqYWludGknLFxuICAnTnlreWluZW4gc2lqYWludGlzaScsXG4gICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgJ1NlbGVjdGVkIGxvY2F0aW9uJyxcbiAgJ1ZhbGQgcG9zaXRpb24nLFxuICAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAnTWluIHBvc2l0aW9uJyxcbiAgJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICdZb3VyIGN1cnJlbnQgbG9jYXRpb24nLFxuICAnV3licmFuZSBtaWVqc2NlJyxcbl07XG5cbi8qKlxuICogVGFrZXMgdGhlIHRhcmdldHMgYW5kIG1vZGlmaWVzIHRoZW0gYmFzZWQgb24gb3duUGxhY2VzIGFuZCBpc0xvY2F0aW9uU2VhcmNoXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzLnRhcmdldHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuaXNMb2NhdGlvblNlYXJjaFxuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5pc01vYmlsZVxuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5vd25QbGFjZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzLnNvdXJjZXNcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gbmV3VGFyZ2V0c1xuICovXG5jb25zdCBnZXROZXdUYXJnZXRzID0gKHtcbiAgdGFyZ2V0cyxcbiAgaXNMb2NhdGlvblNlYXJjaCxcbiAgaXNNb2JpbGUsXG4gIG93blBsYWNlcyxcbiAgc291cmNlcyxcbn0pID0+IHtcbiAgY29uc3QgdXNlQWxsID0gIXRhcmdldHM/Lmxlbmd0aDtcbiAgbGV0IG5ld1RhcmdldHM7XG4gIGlmIChvd25QbGFjZXMpIHtcbiAgICBuZXdUYXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICB9XG4gICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0YXRpb25zJyk7XG4gICAgfVxuICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCF1c2VBbGwpIHtcbiAgICBuZXdUYXJnZXRzID0gWy4uLnRhcmdldHNdO1xuICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICBpZiAoXG4gICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAhaXNNb2JpbGUgJiZcbiAgICAgICghc291cmNlcy5sZW5ndGggfHwgc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1RhcmdldHM7XG59O1xuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBPcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBTdGF0aW9ucywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKlxuICogQHR5cGVkZWYgRFRBdXRvc3VnZ2VzdFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwRWxlbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhY2Vob2xkZXJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uU2VsZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ljb25dXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZhbHVlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW29uQ2xlYXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2xhbmddXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2dldEF1dG9TdWdnZXN0SWNvbnNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbaGFuZGxlVmlhUG9pbnRzXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW2ZvY3VzQ2hhbmdlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW3N0b3JlUmVmXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNNb2JpbGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vYmlsZUxhYmVsXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbnB1dENsYXNzTmFtZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHJhbnNsYXRlZFBsYWNlaG9sZGVyXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVxdWlyZWRdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2ZvbnRXZWlnaHRzXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtjb2xvcnNdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vZGVTZXRdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG93U2Nyb2xsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNFbWJlZGRlZF1cbiAqIEdlb2NvZGluZyByZWxhdGVkIHByb3BzXG4gKiBAcHJvcGVydHkge09iamVjdH0gc2VhcmNoQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0cmFuc3BvcnRNb2RlXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3RhcmdldHNdXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbc291cmNlc11cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZ2VvY29kaW5nU2l6ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtmaWx0ZXJSZXN1bHRzXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtwYXRoT3B0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcmVmUG9pbnRdXG4gKiBAcGFyYW0ge0RUQXV0b3N1Z2dlc3RQcm9wc30gcHJvcHNcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gRFRBdXRvc3VnZ2VzdCh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBwbGFjZWhvbGRlcixcbiAgb25TZWxlY3QsXG4gIGljb24sXG4gIHZhbHVlLFxuICBvbkNsZWFyLFxuICBsYW5nOiBsbmcsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnMsXG4gIGhhbmRsZVZpYVBvaW50cyxcbiAgZm9jdXNDaGFuZ2UsXG4gIHN0b3JlUmVmLFxuICBpc01vYmlsZSxcbiAgbW9iaWxlTGFiZWwsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkLFxuICBhcmlhTGFiZWwsXG4gIGZvbnRXZWlnaHRzLFxuICBjb2xvcnMsXG4gIG1vZGVTZXQsXG4gIHNob3dTY3JvbGwsXG4gIGlzRW1iZWRkZWQsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGZpbHRlclJlc3VsdHMsXG4gIHNlYXJjaENvbnRleHQsXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbn0pIHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICBzb3VyY2VzLFxuICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgaXNDbGVhcmVkOiBmYWxzZSxcbiAgICByZW5kZXJNb2JpbGU6IGZhbHNlLFxuICAgIHZhbHVlLFxuICAgIGVudGVyUGVuZGluZzogZmFsc2UsXG4gICAgaXNNZW51T3BlbjogZmFsc2UsXG4gIH07XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcihzZWFyY2hSZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuICAvLyBSZXNldCB0aGUgc3RhdGUgd2hlbiB2YWx1ZSBvciBzb3VyY2VzIGNoYW5nZSwgdGhpcyBhbHNvIHRyaWdnZXJzIGEgbmV3IHNlYXJjaFxuICB1c2VFZmZlY3QoKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnUkVTRVQnLCBpbml0aWFsU3RhdGUgfSksIFt2YWx1ZV0pO1xuICB1c2VFZmZlY3QoKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnUkVTRVRfU09VUkNFUycsIHNvdXJjZXMgfSksIFtzb3VyY2VzXSk7XG4gIC8vIGNyZWF0ZSBhbmQgc3RvcmUgaW5wdXQgcmVmIGluIHRoZSBwYXJlbnQgaWYgc3RvcmVSZWYgaXMgcHJvdmlkZWRcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYoaWQpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdG9yZVJlZikge1xuICAgICAgc3RvcmVSZWYoaW5wdXRSZWYuY3VycmVudCk7XG4gICAgfVxuICB9LCBbaW5wdXRSZWYuY3VycmVudF0pO1xuXG4gIGNvbnN0IGZldGNoU3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdXNlQWxsID0gIXRhcmdldHM/Lmxlbmd0aDtcbiAgICBjb25zdCBpc0xvY2F0aW9uU2VhcmNoID0gdXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpO1xuXG4gICAgY29uc3QgbmV3VGFyZ2V0cyA9IGdldE5ld1RhcmdldHMoe1xuICAgICAgdGFyZ2V0cyxcbiAgICAgIGlzTG9jYXRpb25TZWFyY2gsXG4gICAgICBpc01vYmlsZSxcbiAgICAgIG93blBsYWNlczogc3RhdGUuc2hvd093blBsYWNlcyxcbiAgICAgIHNvdXJjZXM6IHN0YXRlLnNvdXJjZXMsXG4gICAgfSk7XG4gICAgLy8gcmVtb3ZlICBsb2NhdGlvbiBmYXZvdXJpdGVzIGluIGRlc2t0b3Agc2VhcmNoIChjb2xsZWN0aW9uIGl0ZW0gcmVwbGFjZXMgaXQgaW4gdGFyZ2V0IGFycmF5KVxuICAgIGNvbnN0IG5ld1NvdXJjZXMgPSBzdGF0ZS5zb3VyY2VzXG4gICAgICA/IHN0YXRlLnNvdXJjZXMuZmlsdGVyKFxuICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICFpc0xvY2F0aW9uU2VhcmNoIHx8XG4gICAgICAgICAgICAhcyA9PT0gJ0Zhdm91cml0ZScgfHxcbiAgICAgICAgICAgIHN0YXRlLnNob3dPd25QbGFjZXMgfHxcbiAgICAgICAgICAgIGlzTW9iaWxlLFxuICAgICAgICApXG4gICAgICA6IHN0YXRlLnNvdXJjZXM7XG4gICAgZXhlY3V0ZVNlYXJjaChcbiAgICAgIG5ld1RhcmdldHMsXG4gICAgICBuZXdTb3VyY2VzLFxuICAgICAgdHJhbnNwb3J0TW9kZSxcbiAgICAgIHNlYXJjaENvbnRleHQsXG4gICAgICBmaWx0ZXJSZXN1bHRzLFxuICAgICAgZ2VvY29kaW5nU2l6ZSxcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHN0YXRlLnZhbHVlIHx8ICcnLFxuICAgICAgfSxcbiAgICAgIHNlYXJjaFJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdGRVRDSF9TVUdHRVNUSU9OUycsXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1N1Z2dlc3Rpb25zID0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICBzdWdnZXN0aW9uID0+XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJyB8fFxuICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnICYmXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLnRpbWUgPiBEYXRlLm5vdygpIC8gMTAwMCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkU3VnZ2VzdGlvbiA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICB0cmFuc2xhdGVkU3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQgPSB0KFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgIHsgbG5nIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkU3VnZ2VzdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ0ZFVENIX1NVR0dFU1RJT05TJyxcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBzdWdnZXN0aW9uczogbmV3U3VnZ2VzdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHBhdGhPcHRzLFxuICAgICAgcmVmUG9pbnQsXG4gICAgKTtcbiAgfSwgW1xuICAgIHN0YXRlLnZhbHVlLFxuICAgIHN0YXRlLnNvdXJjZXMsXG4gICAgc3RhdGUuc2hvd093blBsYWNlcyxcbiAgICB0YXJnZXRzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgaXNNb2JpbGUsXG4gICAgbG5nLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICAgIGlkLFxuICBdKTtcblxuICBjb25zdCBzZWxlY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHN1Z2dlc3Rpb24sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICBoYW5kbGVWaWFQb2ludHMoc3VnZ2VzdGlvbiwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25TZWxlY3Qoc3VnZ2VzdGlvbiwgaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvY3VzQ2hhbmdlICYmICghaXNNb2JpbGUgfHwgaXNFbWJlZGRlZCkpIHtcbiAgICAgICAgZm9jdXNDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzTW9iaWxlXSxcbiAgKTtcblxuICBjb25zdCBvblNlbGVjdGVkSXRlbUNoYW5nZSA9IGNoYW5nZXMgPT5cbiAgICBzZWxlY3RTdWdnZXN0aW9uKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLCBjaGFuZ2VzLmhpZ2hsaWdodGVkSW5kZXgpO1xuXG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJbnB1dFByb3BzLFxuICAgIGdldEl0ZW1Qcm9wcyxcbiAgICBzZWxlY3RJdGVtLFxuICAgIG9wZW5NZW51LFxuICAgIGNsb3NlTWVudSxcbiAgfSA9IHVzZUNvbWJvYm94KHtcbiAgICBpbnB1dElkOiBpZCxcbiAgICBpbnB1dFZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogMCxcbiAgICBvbklucHV0VmFsdWVDaGFuZ2U6ICh7IGlucHV0VmFsdWUgfSkgPT5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ0lOUFVUX0NIQU5HRScsIHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgIHN0YXRlUmVkdWNlcjogdXNlQ2FsbGJhY2soXG4gICAgICAob2xkU3RhdGUsIHsgdHlwZSwgY2hhbmdlcyB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JdGVtQ2xpY2s6XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVudGVyOiB7XG4gICAgICAgICAgICAvLyBzZXRDbGVhcmVkKGZhbHNlKTtcbiAgICAgICAgICAgIC8vIGtlZXAgZW50ZXJQcmVzc2VkUmVmIHRvIG1ha2Ugc2VsZWN0aW9uIHdoZW4gc3VnZ2VzdGlvbnMgaGF2ZSBsb2FkZWRcbiAgICAgICAgICAgIGlmIChzdGF0ZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1BFTkRJTkdfRU5URVInLCBlbnRlclBlbmRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2hhbmdlcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHNlbGVjdGluZyBmcm9tIG93biBsb2NhdGlvbnMsIGtlZXAgbWVudSBvcGVuIGFuZCBrZWVwIG9sZCBzdGF0ZVxuICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1NFVF9TT1VSQ0VTJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBbJ0Zhdm91cml0ZScsICdCYWNrJ10sXG4gICAgICAgICAgICAgICAgc2hvd093blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBjaGFuZ2VzLnNlbGVjdGVkSXRlbS50eXBlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLnR5cGUgPT09ICdiYWNrJykge1xuICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1NFVF9TT1VSQ0VTJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0Q2xpY2s6IHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGlucHV0IGlmIGN1cnJlbnQgcG9zaXRpb24gb3Igc2VsZWN0ZWQgbG9jYXRpb24gaXMgc2hvd25cbiAgICAgICAgICAgIGlmIChwb3NpdGlvbnMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoYW5nZXMsIGlucHV0VmFsdWU6ICcnLCBpc09wZW46IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEJsdXI6IHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiBvbGRTdGF0ZS5zZWxlY3RJdGVtLFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWU6IG9sZFN0YXRlLmlucHV0VmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVzY2FwZToge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgaW5wdXRWYWx1ZTogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbc3RhdGUubG9hZGluZywgdmFsdWUsIGlzTW9iaWxlXSxcbiAgICApLFxuICAgIGl0ZW1zOiBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICBpdGVtVG9TdHJpbmcoc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24gPyBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbikgOiAnJztcbiAgICB9LFxuICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlLFxuICAgIG9uSXNPcGVuQ2hhbmdlOiBjaGFuZ2VzID0+IHtcbiAgICAgIGlmIChjaGFuZ2VzLmlzT3BlbiAmJiAhc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGUgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGlucHV0T25CbHVyID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIGlzTW9iaWxlLFxuICAgICAgdmFsdWU6ICFpc01vYmlsZSAmJiB2YWx1ZSxcbiAgICAgIHR5cGU6ICdJTlBVVF9CTFVSJyxcbiAgICB9KTtcbiAgICBpZiAoIWlzTW9iaWxlKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdSRVNFVCcsXG4gICAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjbGVhcklucHV0ID0gcmVmID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdDTEVBUicgfSk7XG4gICAgaWYgKG9uQ2xlYXIpIHtcbiAgICAgIG9uQ2xlYXIoaWQpO1xuICAgIH1cbiAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIG9wZW5NZW51KCk7XG4gIH07XG5cbiAgLy8gRmV0Y2ggc3VnZ2VzdGlvbnMgd2hlbiBpc09wZW4sIHZhbHVlLCBvciBmZXRjaFN1Z2dlc3Rpb25zIGRlcGVuZGllcyBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuIHx8IHN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgZmV0Y2hTdWdnZXN0aW9ucyhzdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9LCBbaXNPcGVuLCBzdGF0ZS5yZW5kZXJNb2JpbGUsIHN0YXRlLnZhbHVlLCBmZXRjaFN1Z2dlc3Rpb25zXSk7XG5cbiAgLy8gdGhpcyBlZmZlY3QgaGFuZGxlcyBzZWxlY3RpbmcgdGhlIHN1Z2dlc3Rpb24gd2hlbiBlbnRlciB3YXMgcHJlc3NlZCBidXQgc3VnZ2VzdGlvbnMgd2VyZSBzdGlsbCBsb2FkaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLmVudGVyUGVuZGluZyAmJiAhc3RhdGUubG9hZGluZykge1xuICAgICAgc2VsZWN0U3VnZ2VzdGlvbihzdGF0ZS5zdWdnZXN0aW9uc1swXSwgMCk7XG4gICAgICBjbG9zZU1lbnUoKTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5sb2FkaW5nLCBzdGF0ZS5wZW5kaW5nRW50ZXIsIHN0YXRlLnN1Z2dlc3Rpb25zXSk7XG5cbiAgY29uc3QgYmFzZUl0ZW1Qcm9wcyA9IHtcbiAgICBsb2FkaW5nOiBzdGF0ZS5sb2FkaW5nLFxuICAgIGlzTW9iaWxlLFxuICAgIGFyaWFGYXZvdXJpdGVTdHJpbmc6IHQoJ2Zhdm91cml0ZScsIHsgbG5nIH0pLFxuICAgIGZvbnRXZWlnaHRzLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnMsXG4gICAgY29sb3JzLFxuICAgIG1vZGVTZXQsXG4gIH07XG5cbiAgY29uc3Qge1xuICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbixcbiAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgIFNlYXJjaEJhcklkLFxuICAgIGFyaWFMYWJlbFRleHQsXG4gIH0gPSBnZXRBcmlhUHJvcHMoe1xuICAgIGlkLFxuICAgIGxuZyxcbiAgICB0LFxuICAgIGlzTW9iaWxlLFxuICAgIGFyaWFMYWJlbCxcbiAgICBzdWdnZXN0aW9uczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgdmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgIHJlcXVpcmVkLFxuICB9KTtcblxuICBjb25zdCBtb2JpbGVDbGVhck9sZFNlYXJjaGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGV4dCwgY2xlYXJPbGRTZWFyY2hlcywgY2xlYXJGdXR1cmVSb3V0ZXMgfSA9IHNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGZldGNoU3VnZ2VzdGlvbnMoc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVuZGVyTW9iaWxlICYmICFpc09wZW4pIHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUJywgaW5pdGlhbFN0YXRlIH0pO1xuICAgIH1cbiAgfSwgW3N0YXRlLnJlbmRlck1vYmlsZSwgaXNPcGVuXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgPE1vYmlsZVZpZXdcbiAgICAgICAgICBwbGFjZWhvbGRlcj17dChwbGFjZWhvbGRlciwgeyBsbmcgfSl9XG4gICAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e21vYmlsZUNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgICBtb2JpbGVMYWJlbD17bW9iaWxlTGFiZWwgfHwgdChpZCwgeyBsbmcgfSl9XG4gICAgICAgICAgYXJpYVByb3BzPXt7XG4gICAgICAgICAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gICAgICAgICAgICBTZWFyY2hCYXJJZCxcbiAgICAgICAgICAgIGFyaWFSZXF1aXJlZFRleHQsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U9e29uU2VsZWN0ZWRJdGVtQ2hhbmdlfVxuICAgICAgICAgIHZhbHVlPXtzdGF0ZS52YWx1ZX1cbiAgICAgICAgICBjbGVhcklucHV0PXtjbGVhcklucHV0fVxuICAgICAgICAgIHN1Z2dlc3Rpb25Qcm9wcz17YmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgICBzaG93U2Nyb2xsPXshIXNob3dTY3JvbGx9XG4gICAgICAgICAgY29sb3JzPXtjb2xvcnN9XG4gICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgIHN0eWxlc1tpZF0sXG4gICAgICAgICAgc3RhdGUucmVuZGVyTW9iaWxlICYmICdoaWRkZW4nLFxuICAgICAgICBdKX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGNvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogY29sb3JzLmhvdmVyLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7aWNvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgIHN0eWxlc1snYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbiddLFxuICAgICAgICAgICAgICBzdHlsZXNbaWRdLFxuICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZSAmJiBzdHlsZXNbYCR7aW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gXSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQodCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJywgeyBsbmcgfSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz17YCR7aWNvbn1gfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8SW5wdXRcbiAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgYXJpYUxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb25cbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBnZXRJbnB1dFByb3BzPXtnZXRJbnB1dFByb3BzfVxuICAgICAgICAgIGdldExhYmVsUHJvcHM9e2dldExhYmVsUHJvcHN9XG4gICAgICAgICAgc2VsZWN0SXRlbT17c2VsZWN0SXRlbX1cbiAgICAgICAgICB2YWx1ZT17c3RhdGUudmFsdWV9XG4gICAgICAgICAgY2xlYXJJbnB1dD17Y2xlYXJJbnB1dH1cbiAgICAgICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgY2xlYXJCdXR0b25Db2xvcj17Y29sb3JzLnByaW1hcnl9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3RyYW5zbGF0ZWRQbGFjZWhvbGRlciB8fCB0KHBsYWNlaG9sZGVyLCB7IGxuZyB9KX1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX1cbiAgICAgICAgICBpc01vYmlsZT17aXNNb2JpbGV9XG4gICAgICAgICAgaW5wdXRPbkJsdXI9e2lucHV0T25CbHVyfVxuICAgICAgICAvPlxuXG4gICAgICAgIDxTdWdnZXN0aW9uc1xuICAgICAgICAgIGhpZGRlbj17IWlzT3BlbiB8fCBpc01vYmlsZX1cbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgIGdldE1lbnVQcm9wcz17Z2V0TWVudVByb3BzfVxuICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICB7Li4uYmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5EVEF1dG9zdWdnZXN0LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xlYXJGdXR1cmVSb3V0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH0pLFxuICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVmUG9pbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICB9KSxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG4gIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkRUQXV0b3N1Z2dlc3QuZGVmYXVsdFByb3BzID0ge1xuICBpY29uOiB1bmRlZmluZWQsXG4gIHZhbHVlOiAnJyxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgbGFuZzogJ2ZpJyxcbiAgc3RvcmVSZWY6IHVuZGVmaW5lZCxcbiAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gIGZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgc291cmNlczogW10sXG4gIHRhcmdldHM6IHVuZGVmaW5lZCxcbiAgaXNNb2JpbGU6IGZhbHNlLFxuICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgZ2VvY29kaW5nU2l6ZTogdW5kZWZpbmVkLFxuICBwYXRoT3B0czoge1xuICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgfSxcbiAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIGZvbnRXZWlnaHRzOiB7XG4gICAgbWVkaXVtOiA1MDAsXG4gIH0sXG4gIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgcmVxdWlyZWQ6IGZhbHNlLFxuICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IGZhbHNlLFxuICByZWZQb2ludDoge30sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgIDxEVEF1dG9zdWdnZXN0IHsuLi5wcm9wc30gLz5cbiAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGFkbWluIiwiaW5jbHVkZXMiLCJsYXllciIsImdpZCIsImxhYmVsSWQiLCJndGZzSWQiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwic3BsaXRTaG9ydE5hbWVBdExldHRlcnMiLCJ0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMiLCJ0ZXN0IiwiTGF5ZXJUeXBlIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwiZmlsdGVyIiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImVsZW1lbnQiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsInNlcmlhbGl6ZSIsIm9iaiIsInByZWZpeCIsImtleXMiLCJwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJheGlvcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwiX29iamVjdFNwcmVhZCIsImxheWVycyIsInRvU3RyaW5nIiwiZmVhdHVyZXMiLCJnZXRTdG9wc0Zyb21HZW9jb2RpbmciLCJzdG9wcyIsIlVSTF9QRUxJQVNfUExBQ0UiLCJnaWRzIiwic3RvcFN0YXRpb25NYXAiLCJzdG9wIiwiY29kZSIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJzbGljZSIsImFkZGVuZHVtIiwibGFzdFVwZGF0ZWQiLCJmYXZvdXJpdGVJZCIsImZpbHRlck9sZFNlYXJjaGVzIiwib2xkU2VhcmNoZXMiLCJkcm9wTGF5ZXJzIiwibWF0Y2hpbmdPbGRTZWFyY2hlcyIsInRha2UiLCJuZXdJdGVtIiwidGltZXRhYmxlQ2xpY2tlZCIsImFycm93Q2xpY2tlZCIsInJvdXRlTGF5ZXJzIiwibG9jYXRpb25MYXllcnMiLCJwYXJraW5nTGF5ZXJzIiwic3RvcExheWVycyIsImRlYm91bmNlZFNlYXJjaCIsImRlYm91bmNlIiwidGFyZ2V0cyIsInRyYW5zcG9ydE1vZGUiLCJzZWFyY2hDb250ZXh0IiwiZmlsdGVyUmVzdWx0cyIsImdlb2NvZGluZ1NpemUiLCJjYWxsYmFjayIsInBhdGhPcHRzIiwicmVmUG9pbnQiLCJnZXRQb3NpdGlvbnMiLCJnZXRGYXZvdXJpdGVMb2NhdGlvbnMiLCJnZXRPbGRTZWFyY2hlcyIsImdldEZhdm91cml0ZVN0b3BzIiwicGFya2luZ0FyZWFTb3VyY2VzIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkiLCJnZXRGYXZvdXJpdGVSb3V0ZXMiLCJnZXRSb3V0ZXNRdWVyeSIsImNvbnRleHQiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJsb2NhdGlvbkF3YXJlIiwiVVJMX1BFTElBUyIsImZlZWRJRHMiLCJnZW9jb2RpbmdTZWFyY2hQYXJhbXMiLCJnZW9jb2RpbmdTb3VyY2VzIiwiZ2V0RnV0dXJlUm91dGVzIiwiY2l0eUJpa2VOZXR3b3JrcyIsImFsbFRhcmdldHMiLCJhbGxTb3VyY2VzIiwicG9zaXRpb24iLCJzZWFyY2hDb21wb25lbnRzIiwic2VhcmNoZXMiLCJsYW5ndWFnZSIsImxhdCIsImxvbiIsInRvRml4ZWQiLCJtb2RlIiwic3RhdHVzIiwicHVzaCIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJsb2NhdGlvbkhpc3RvcnkiLCJzaXplIiwiZmVlZElkcyIsImhpc3RvcnkiLCJ1c2VTdG9wcyIsInVzZVN0YXRpb25zIiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5Iiwic3RvcHNTdGF0aW9ucyIsInMiLCJmaWx0ZXJGYXZvdXJpdGVTdG9wcyIsImRlZHVwZXN0b3BzIiwiZmVlZHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiYWxsIiwiZmxhdHRlbiIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJsZWFkaW5nIiwiaTE4biIsImNyZWF0ZUluc3RhbmNlIiwiZmFsbGJhY2tMbmciLCJyZXNvdXJjZXMiLCJkZSIsInRyYW5zbGF0aW9uIiwiYWlycGxhbmUiLCJhcnJpdmFsIiwiYmFjayIsImJpa2VyZW50YWxzdGF0aW9uIiwiYnVzIiwiY2FuY2VsIiwiY3VycmVudHBvc2l0aW9uIiwiZGVsZXRlIiwiZGVwYXJ0dXJlIiwiZmF2b3VyaXRlIiwiZmVycnkiLCJvd25sb2NhdGlvbnMiLCJsb2FkaW5nIiwicmFpbCIsInN0cmVldCIsInN1YndheSIsInN0YXRpb24iLCJ0cmFtIiwidmVudWUiLCJ3aGVyZSIsInBsYWNlIiwiZW4iLCJiaWtlcGFyayIsImNhcnBhcmsiLCJwbGF0Zm9ybSIsInJlcXVpcmVkIiwidHJhY2siLCJmaSIsInZlaGljbGVyZW50YWxzdGF0aW9uIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiaW5pdCIsImdldExvY2FsYWRtaW4iLCJzdWdnZXN0aW9uIiwiZ2V0U3RvcENvZGUiLCJnZXROYW1lTGFiZWwiLCJtZW1vaXplIiwicGxhaW4iLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJsb25nTmFtZSIsImFnZW5jeSIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJjbG9uZURlZXAiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsImtleSIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiaXNQT0lTZWFyY2giLCJnZXRQbGF0Zm9ybSIsImxuZyIsIkdURlMiLCJtb2RlcyIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsImxvY2FsaXR5IiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwidGltZSIsIkRhdGVUaW1lIiwiZnJvbVNlY29uZHMiLCJub3ciLCJhcnJpdmVCeSIsImhhc1NhbWUiLCJwbHVzIiwiZGF5cyIsInRvRm9ybWF0IiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiZ2V0TGFiZWwiLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsInN1Z2dlc3Rpb25zIiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0Iiwic2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlJCQwIiwibiIsImciLCJ3aW5kb3ciLCJ0aGlzIiwiaWdub3JlIiwiaGVhZGVyIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwib2Zmc2V0IiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiYXJndW1lbnRzIiwiaGFzT3duUHJvcGVydHkiLCJjaGFyQXQiLCJzdWJzdHIiLCJ1IiwiY2hhckNvZGVBdCIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIm1heCIsImJvZHkiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJvdXRsaW5lIiwic2Nyb2xsVG8iLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJkZXRhaWwiLCJhbmNob3IiLCJ0b2dnbGUiLCJkaXNwYXRjaEV2ZW50IiwiYyIsImEiLCJsIiwiZiIsImQiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJoIiwibSIsInRhZ05hbWUiLCJ5IiwicGFnZVlPZmZzZXQiLCJxdWVyeVNlbGVjdG9yIiwiYiIsInciLCJFIiwiTyIsIm9mZnNldFBhcmVudCIsIm1pbiIsImlubmVySGVpZ2h0IiwiUyIsIl8iLCJJIiwiTSIsIkwiLCJmbG9vciIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInB1c2hTdGF0ZSIsInNtb290aFNjcm9sbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aXRsZSIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiaG9zdG5hbWUiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiaHJlZiIsImRlY29kZVVSSUNvbXBvbmVudCIsImhhc2giLCJyZXBsYWNlU3RhdGUiLCJzdGF0ZSIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhcHBseSIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwidXNlRWxlbWVudFNpemUiLCJ1c2VSZWYiLCJ3aWR0aCIsImNsaWVudFdpZHRoIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsInVub2JzZXJ2ZSIsImNvbnRhaW5lclJlZiIsImlzVmlzaWJsZSIsInVzZUlzQnJlYWtwb2ludCIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJpbm5lcldpZHRoIiwidXNlT25SZXNpemUiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVJ1bkFmdGVyVXBkYXRlIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwidG9wIiwidW5sb2NrIiwiX19pbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsInVzZVNtb290aFNjcm9sbCIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIlN1Z2dlc3Rpb24iLCJfcmVmIiwiZ2V0SXRlbVByb3BzIiwiaGlnaGxpZ2h0ZWRJbmRleCIsIml0ZW1JbmRleCIsInN0eWxlcyIsInJlc3QiLCJfZXhjbHVkZWQiLCJ1c2VUcmFuc2xhdGlvbiIsImNvbnRlbnQiLCJSZWFjdCIsImFzc2lnbiIsImNsYXNzTmFtZSIsImN4Iiwic3VnZ2VzdGlvbkhpZ2hsaWdodGVkIiwiaW5kZXgiLCJTdWdnZXN0aW9uSXRlbSIsIml0ZW1TaGFwZSIsIlByb3BUeXBlcyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInNoYXBlIiwic3RyaW5nIiwic2VsZWN0ZWRJY29uSWQiLCJpY29uQ29sb3IiLCJjb2xvciIsImJvb2wiLCJTdWdnZXN0aW9ucyIsIl9yZWYyIiwiZ2V0TWVudVByb3BzIiwiaGlkZGVuIiwicmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uIiwiaGFuZGxlQ2xlYXJIaXN0b3J5IiwiX2V4Y2x1ZGVkMiIsInN1Z2dlc3Rpb25zQ29udGFpbmVyT3BlbiIsInN1Z2dlc3Rpb25zQ29udGFpbmVyIiwic3VnZ2VzdGlvbnNMaXN0Iiwib25DbGljayIsInByb3BUeXBlcyIsImlzUmVxdWlyZWQiLCJmdW5jIiwibnVtYmVyIiwib2JqZWN0T2YiLCJhcnJheU9mIiwiZGVmYXVsdFByb3BzIiwiQ2xlYXJCdXR0b24iLCJjbGVhcklucHV0Iiwib25LZXlEb3duIiwiSWNvbiIsImltZyIsInBsYWNlaG9sZGVyIiwiZ2V0SW5wdXRQcm9wcyIsImdldExhYmVsUHJvcHMiLCJhcmlhTGFiZWwiLCJpbnB1dFJlZiIsInJlbmRlckxhYmVsIiwiaXNNb2JpbGUiLCJpbnB1dENsYXNzTmFtZSIsImNsZWFyQnV0dG9uQ29sb3IiLCJhdXRvRm9jdXMiLCJpbnB1dE9uQmx1ciIsImNvbnRhaW5lciIsImh0bWxGb3IiLCJ0aGluIiwiaGFzVmFsdWUiLCJvbkJsdXIiLCJvbmVPZlR5cGUiLCJvYmplY3QiLCJNb2JpbGVWaWV3IiwiYXBwRWxlbWVudCIsIm9uU2VsZWN0ZWRJdGVtQ2hhbmdlIiwiZm9udFdlaWdodHMiLCJjbGVhck9sZFNlYXJjaGVzIiwic3VnZ2VzdGlvblByb3BzIiwiYXJpYVByb3BzIiwibW9iaWxlTGFiZWwiLCJzaG93U2Nyb2xsIiwiZGlzcGF0Y2giLCJjb2xvcnMiLCJob29rcyIsIm1vYmlsZVN0eWxlcyIsIm1vYmlsZU5vU2Nyb2xsU3R5bGVzIiwiaW5wdXRJZCIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsInJlbmRlck1vYmlsZSIsInNldEhpZ2hsaWdodGVkSW5kZXgiLCJ1c2VDb21ib2JveCIsImlucHV0VmFsdWUiLCJpc09wZW4iLCJjaGFuZ2VzIiwic2VsZWN0ZWRJdGVtIiwiZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXgiLCJvbklucHV0VmFsdWVDaGFuZ2UiLCJzdGF0ZVJlZHVjZXIiLCJvbGRTdGF0ZSIsInN0YXRlQ2hhbmdlVHlwZXMiLCJJbnB1dEtleURvd25Fc2NhcGUiLCJJbnB1dEtleURvd25FbnRlciIsImVudGVyUGVuZGluZyIsIklucHV0Qmx1ciIsIml0ZW1Ub1N0cmluZyIsInN1cHByZXNzUmVmRXJyb3IiLCJhcmlhUmVxdWlyZWRUZXh0IiwiU2VhcmNoQmFySWQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJvdmVybGF5Q2xhc3NOYW1lIiwic2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlIiwic2hvdWxkQ2xvc2VPbkVzYyIsInByaW1hcnkiLCJhY2Nlc3NpYmxlUHJpbWFyeSIsImhvdmVyIiwibWVkaXVtIiwidGFiSW5kZXgiLCJEaWFsb2dNb2RhbCIsImlzTW9kYWxPcGVuIiwiaGFuZGxlQ2xvc2UiLCJoZWFkZXJUZXh0IiwicHJpbWFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwic2VhcmNoUmVkdWNlciIsImFjdGlvbiIsInNob3dPd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwiaXNDbGVhcmVkIiwiaW5pdGlhbFN0YXRlIiwiaXNNZW51T3BlbiIsInBvc2l0aW9ucyIsIkRUQXV0b3N1Z2dlc3QiLCJvblNlbGVjdCIsImljb24iLCJvbkNsZWFyIiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsImhhbmRsZVZpYVBvaW50cyIsImZvY3VzQ2hhbmdlIiwic3RvcmVSZWYiLCJ0cmFuc2xhdGVkUGxhY2Vob2xkZXIiLCJtb2RlU2V0IiwiaXNFbWJlZGRlZCIsInVzZVJlZHVjZXIiLCJmZXRjaFN1Z2dlc3Rpb25zIiwiaXNMb2NhdGlvblNlYXJjaCIsIm5ld1RhcmdldHMiLCJnZXROZXdUYXJnZXRzIiwib3duUGxhY2VzIiwidXNlQWxsIiwiZXhlY3V0ZVNlYXJjaCIsInNlYXJjaFJlc3VsdCIsIm5ld1N1Z2dlc3Rpb25zIiwiRGF0ZSIsInRyYW5zbGF0ZWRTdWdnZXN0aW9uIiwic2VsZWN0U3VnZ2VzdGlvbiIsImJsdXIiLCJzZWxlY3RJdGVtIiwib3Blbk1lbnUiLCJjbG9zZU1lbnUiLCJJdGVtQ2xpY2siLCJJbnB1dENsaWNrIiwib25Jc09wZW5DaGFuZ2UiLCJwZW5kaW5nRW50ZXIiLCJiYXNlSXRlbVByb3BzIiwiYXJpYUZhdm91cml0ZVN0cmluZyIsImFyaWFMYWJlbFRleHQiLCJnZXRBcmlhUHJvcHMiLCJhcmlhQmFySWQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYVN1Z2dlc3Rpb25MZW4iLCJjb3VudCIsInNlbGVjdGlvbiIsIkZyYWdtZW50IiwibW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyIsImNsZWFyRnV0dXJlUm91dGVzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJkZWZhdWx0Q29sb3JzIiwicHJvcHMiLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiJ5eURBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0Ys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
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("prop-types"),require("react"),require("react-i18next"),require("classnames"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/get"),require("downshift"),require("@digitransit-component/digitransit-component-icon"),require("i18next"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("luxon"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal"),require("@digitransit-component/digitransit-component-suggestion-item")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","classnames","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/get","downshift","@digitransit-component/digitransit-component-icon","i18next","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","luxon","react-modal","@digitransit-component/digitransit-component-dialog-modal","@digitransit-component/digitransit-component-suggestion-item"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.PropTypes,e.React,e.reactI18next,e.cx,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.get,e.downshift,e.Icon,e.i18next,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.luxon,e.ReactModal,e.DialogModal,e.SuggestionItem)}(this,function(e,t,u,n,o,r,i,a,s,l,c,d,p,g,f,h,b,E,A,m,y,F,D){"use strict";function C(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=C(t),v=C(u),B=C(o),S=C(r),k=C(i),w=C(a),x=C(s),O=C(l),j=C(c),M=C(d),P=C(g),R=C(b),I=C(E),L=C(A),N=C(y),q=C(F),z=C(D);function T(e){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},T(e)}function H(e){var t=function(e,t){if("object"!=T(e)||!e)return e;var u=e[Symbol.toPrimitive];if(void 0!==u){var n=u.call(e,t||"default");if("object"!=T(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==T(t)?t:t+""}function U(e,t,u){return(t=H(t))in e?Object.defineProperty(e,t,{value:u,enumerable:!0,configurable:!0,writable:!0}):e[t]=u,e}function V(e,t){return e&&t&&e===t}const W=["stop","station","favouriteStop","favouriteStation"],G=["favouriteVehicleRentalStation","bikestation"];function $(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function Q(e,t){const u=e.properties,n=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=u.origin,t=u.destination,o=n.origin,r=n.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${o.name}//${o.localadmin}//${r.name}//${r.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if(G.includes(u.layer)&&G.includes(n.layer)){return(u.gid||$(u.labelId))===(n.gid||$(n.labelId))}if(u.gtfsId&&n.gtfsId)return u.gtfsId===n.gtfsId;if(W.includes(u.layer)&&W.includes(n.layer)&&u.gid&&n.gid)return u.gid===n.gid;const o=e&&e.geometry?e.geometry.coordinates:void 0,r=t&&t.geometry?t.geometry.coordinates:void 0;return!!(o&&r&&Math.abs(o[0]-r[0])<1e-6&&Math.abs(o[1]-r[1])<1e-6&&(V(u.name,n.name)||V(u.label,n.label)||V(u.address,n.address)||V(u.address,n.label)||V(u.label,n.address)))}const K=e=>x.default(e)?e.toLowerCase():"",X=e=>e.split(/([A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{105C0}-\u{105F3}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10940}-\u{10959}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10D4A}-\u{10D65}\u{10D6F}-\u{10D85}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10EC2}-\u{10EC7}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11380}-\u{11389}\u{1138B}\u{1138E}\u{11390}-\u{113B5}\u{113B7}\u{113D1}\u{113D3}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11BC0}-\u{11BE0}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11DB0}-\u{11DDB}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{13460}-\u{143FA}\u{14400}-\u{14646}\u{16100}-\u{1611D}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16D40}-\u{16D6C}\u{16E40}-\u{16E7F}\u{16EA0}-\u{16EB8}\u{16EBB}-\u{16ED3}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{16FF2}\u{16FF3}\u{17000}-\u{18CD5}\u{18CFF}-\u{18D1E}\u{18D80}-\u{18DF2}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E5D0}-\u{1E5ED}\u{1E5F0}\u{1E6C0}-\u{1E6DE}\u{1E6E0}-\u{1E6E2}\u{1E6E4}\u{1E6E5}\u{1E6E7}-\u{1E6ED}\u{1E6F0}-\u{1E6F4}\u{1E6FE}\u{1E6FF}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B81D}\u{2B820}-\u{2CEAD}\u{2CEB0}-\u{2EBE0}\u{2EBF0}-\u{2EE5D}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{33479}]+)/u),Z=e=>/^[0-9]+[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{105C0}-\u{105F3}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10940}-\u{10959}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10D4A}-\u{10D65}\u{10D6F}-\u{10D85}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10EC2}-\u{10EC7}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11380}-\u{11389}\u{1138B}\u{1138E}\u{11390}-\u{113B5}\u{113B7}\u{113D1}\u{113D3}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11BC0}-\u{11BE0}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11DB0}-\u{11DDB}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{13460}-\u{143FA}\u{14400}-\u{14646}\u{16100}-\u{1611D}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16D40}-\u{16D6C}\u{16E40}-\u{16E7F}\u{16EA0}-\u{16EB8}\u{16EBB}-\u{16ED3}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{16FF2}\u{16FF3}\u{17000}-\u{18CD5}\u{18CFF}-\u{18D1E}\u{18D80}-\u{18DF2}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E5D0}-\u{1E5ED}\u{1E5F0}\u{1E6C0}-\u{1E6DE}\u{1E6E0}-\u{1E6E2}\u{1E6E4}\u{1E6E5}\u{1E6E7}-\u{1E6ED}\u{1E6F0}-\u{1E6F4}\u{1E6FE}\u{1E6FF}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B81D}\u{2B820}-\u{2CEAD}\u{2CEB0}-\u{2EBE0}\u{2EBF0}-\u{2EE5D}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{33479}]+$/u.test(e),J="back",Y="currentPosition",ee="favouriteStop",te="favouriteStation",ue="favouritePlace",ne="favouriteRoute",oe="favouriteVehicleRentalStation",re="futureRoute",ie="station",ae="selectFromMap",se="ownLocations",le="stop",ce="bikestation",de="carpark",pe="bikepark",ge=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,fe=(e,t)=>{switch(e){case Y:return 1;case J:return.9;case ae:return.8;case se:return.79;case te:case ue:case ee:case ne:case oe:return.45;case re:return.44;case ie:return x.default(t)&&0===t.indexOf("gtfs")?.43:.42;case de:case pe:case ce:return.38;case le:return.36;default:return.41}},he=(e,t,u="")=>{if(!Array.isArray(t)||!t.length)return t;const n=t=>x.default(t)&&e&&e.test(t),o=K(u),r=n(o),i=O.default(t.filter(e=>e),[e=>r&&n(K(e.properties.shortName))&&0===K(e.properties.shortName).indexOf(o)?1:0,e=>{const{confidence:t,layer:u,source:n}=e.properties;if(0===o.length)return fe(u,n);if(!t)return fe(u,n)+((e,t)=>x.default(e)&&0!==e.length?["name","label","address","shortName"].map(e=>({name:e,value:t[e]})).filter(e=>x.default(e.value)&&e.value.length>0).map(t=>{let u=K(t.value);return 0===u.indexOf(e)?("shortName"===t.name&&Z(u)&&([u]=X(u)),.5+e.length/u.length):.5*e.length/(e.length+1)}).reduce((e,t)=>t>e?t:e,0):0)(o,e.properties);switch(u){case ie:return t+(0===n.indexOf("gtfs")?.02:.01);case le:case de:case pe:return t-.05;case ce:return t-.04;default:return t}},e=>{if(e.properties.shortName)return Z(e.properties.shortName)?X(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return Z(e.properties.shortName)?X(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return j.default(i,Q)},be=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function Ee(e,t,u){if("string"==typeof t&&t.length>0){const n=t.toLowerCase().trim(),o=n.includes(" ")||n.includes(",");return e.filter(e=>{let t=[];u.forEach(u=>{let n=M.default(e,u);o||"properties.label"!==u&&"address"!==u||!n||(n=n.split(","),n.length>2?n.splice(n.length-2,2):n.length>1&&n.splice(n.length-1,1),n=n.join(",")),n&&(t=o?t.concat(n.toLowerCase()):t.concat(n.toLowerCase().replace(/,/g," ").split(" ")))});for(let e=0;e<t.length;e++)if(0===t[e].indexOf(n))return!0;return!1})}return e}function Ae(e,t){return e?Object.keys(e).map(u=>{const n=t||u,o=e[u];return"object"==typeof o?Ae(o,n):`${encodeURIComponent(n)}=${encodeURIComponent(o)}`}).join("&"):""}const me=require("axios").default;function ye(e,t){return me.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+Ae(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)}function Fe(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function De(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?Fe(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):Fe(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}function Ce(e,t,u,n,o,r,i,a){const s=e?e.trim():null;if(null==s||s.length<1||i&&!i.test(s))return Promise.resolve([]);const l=r||"https://api.digitransit.fi/geocoding/v1/search";let c=De(De(De({text:s},t),n),{},{lang:u});if(o&&(c=De(De({},c),{},{sources:o})),a){const e=a.toString();c=De(De({},c),{},{layers:e})}return ye(l,c).then(e=>e.features)}function _e(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function ve(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?_e(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):_e(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}function Be(e,t){if(!e||e.length<1)return Promise.resolve([]);let u="";const n=e.map(e=>{const t="stop"===e.type?"stop":"station";let n=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(n+=`#${e.code}`),u+=`${n},`,ve(ve({},e),{},{gid:n})}).reduce(function(e,t){return e[t.gid]=t,e},{});return ye(t,{ids:u.slice(0,-1)}).then(e=>e.features.map(e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:n[e.properties.gid].gid,code:n[e.properties.gid].code,gtfsId:n[e.properties.gid].gtfsId,lastUpdated:n[e.properties.gid].lastUpdated,favouriteId:n[e.properties.gid].favouriteId,address:e.properties.label,layer:ge(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))}function Se(e,t,u){let n=Ee(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return u&&(n=n.filter(e=>!u.includes(e.properties.layer))),Promise.resolve(w.default(n,10).map(e=>{const t=ve(ve({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t}))}const ke=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],we=["venue","address","street"],xe=["carpark","bikepark"],Oe=["stop","station"];const je=S.default(function(e,t,u,n,o,r,{input:i},a,s,l){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:g,parkingAreaSources:f,getLanguage:h,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:E,getFavouriteVehicleRentalStations:A,getFavouriteRoutesQuery:m,getFavouriteRoutes:y,getRoutesQuery:F,context:D,isPeliasLocationAware:C,minimalRegexp:_,lineRegexp:v,URL_PELIAS:B,URL_PELIAS_PLACE:S,feedIDs:x,geocodingSearchParams:O,geocodingSources:j,getFutureRoutes:M,cityBikeNetworks:P}=n,R=!e||0===e.length,I=!t||0===t.length,L=c(D),N=[],q={type:"all",term:i,results:[]},z=h(D),T=C&&null!=l&&l.lat&&null!=l&&l.lon?{"focus.point.lat":l.lat.toFixed(3),"focus.point.lon":l.lon.toFixed(3)}:{},H=u?u.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==L.status&&N.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(i,L)),(R||e.includes("MapPosition"))&&N.push(function(e){return"string"!=typeof e||0===e.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([])}(i)),e.includes("FutureRoutes")){const e=M(D);N.push(w.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if((null==t?void 0:t.length)>0)return!0;const u=e.getFavouriteVehicleRentalStations(e.context);if((null==u?void 0:u.length)>0)return!0;const n=e.getFavouriteStops(e.context);return(null==n?void 0:n.length)>0}(n)&&N.push(function(e){return"string"!=typeof e||0===e.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([])}(i)),R||e.includes("Locations")){const u=O;if(t.includes("Favourite")){const e=d(D);N.push(function(e,t){return Promise.resolve(Ee(e,t,["address","name"]).map(e=>({type:"FavouritePlace",properties:ve(ve({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}})))}(e,i)),t.includes("Back")&&N.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(I||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),N.push(Ce(i,u,z,T,j.join(","),B,_,t))}if(I||t.includes("History")){const e=p(D,"endpoint"),t=["bikestation"];t.push(...Oe),t.push(...ke),t.push(...xe),N.push(Se(e,i,t))}}if(R||e.includes("ParkingAreas")){if(I||t.includes("Datasource")){const e=O;r&&10!==r&&(e.size=r);const t=["carpark","bikepark"],u=f?f.join(","):null;N.push(Ce(i,e,z,T,u,B,_,t).then(e=>o?o(e,H):e))}if(I||t.includes("History")){const e=p(D),t=["bikestation"];t.push(...Oe),t.push(...ke),t.push(...we),N.push(Se(e,i,t))}}const U=e.includes("Stops"),V=e.includes("Stations");if(R||U||V){if(t.includes("Favourite")){const e=g(D);let t;t=e.every(e=>"station"===e.type)?Be(e,S).then(e=>o?o(e,H):e):b(e).then(e=>Be(e,S)).then(e=>o?o(e,H):e),N.push(function(e,t,u,n){return e.then(e=>Ee(e.filter(e=>"stop"===e.type?u:n),t,["properties.name","properties.name","properties.address"]))}(t,i,U,V))}if(I||t.includes("Datasource")){const t=[];U&&t.push("stop"),V&&t.push("station");const u=r&&10!==r?{size:r}:{};O&&O["boundary.country"]&&(u["boundary.country"]=O["boundary.country"]),(R||e.includes("Locations"))&&(u.dedupestops=1);const n=x.map(e=>`gtfs${e}`).join(",");N.push(Ce(i,u,z,T,n,B,_,t).then(e=>o?o(e,H):e))}if(I||t.includes("History")){const e=p(D).filter(e=>!e.properties.gid||e.properties.gid.includes("GTFS:")),t=["bikestation"];t.push(...ke),t.push(...we),t.push(...xe),U||t.push("stop"),V||t.push("station"),u?N.push(Se(e,i,t).then(e=>o?o(e,H):e)):N.push(Se(e,i,t))}}if(R||e.includes("Routes")){if(t.includes("Favourite")){const e=y(D);N.push(m(e,i,H,s).then(e=>o?o(e,H,"Routes"):e))}if(N.push(F(i,x,u,s).then(e=>o?o(e,H,"Routes"):e)),I||t.includes("History")){const e=p(D),t=["bikestation"];u&&t.push(...ke.filter(e=>!(e===u))),t.push(...Oe),t.push(...we),t.push(...xe),N.push(Se(e,i,t).then(e=>o?o(e,H,"Routes"):e))}}if(R||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=A(D);N.push(E(e,i))}if(I||t.includes("Datasource")){const e=["bikestation"],t=r&&10!==r?{size:r}:{};N.push(Ce(i,t,z,T,P.join(","),B,_,e).then(e=>o?o(e,H,"VehicleRentalStations"):e))}if(I||t.includes("History")){const e=p(D),t=[...Oe];t.push(...ke),t.push(...we),t.push(...xe),N.push(Se(e,i,t))}}Promise.all(N).then(k.default).then(e=>{q.results=e}).catch(e=>{q.error=e}).then(()=>{a(ve(ve({},q),{},{results:he(v,q.results,i)}))})},300,{leading:!0}),Me=f.createInstance({fallbackLng:"fi",resources:{de:{translation:{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:{translation:{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-bikepark":"Search bike parks","stop-near-you-bus":"Search bus routes or stops","stop-near-you-carpark":"Search car parks","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:{translation:{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äpysäköinti",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","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-bikepark":"Hae pyöräparkkia","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-carpark":"Hae autoparkkia","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:{translation:{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:{translation:{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-bikepark":"Sök cykelparkering","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-carpark":"Sök anslutningsparkering","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"}}},defaultNS:"translation",react:{useSuspense:!0}});function Pe(e,t){void 0===t&&(t={});var u=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===u&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}Me.init();var Re={container:"styles_container__CyBuz",input:"styles_input__x7Oye",favourite:"styles_favourite__xn1Du",thin:"styles_thin__ToA7-",hasValue:"styles_hasValue__qkIFF",suggestionsContainerOpen:"styles_suggestionsContainerOpen__1odqA",suggestionsContainer:"styles_suggestionsContainer__-FUbj",suggestionsList:"styles_suggestionsList__e-mac",suggestion:"styles_suggestion__oCpdb",suggestionHighlighted:"styles_suggestionHighlighted__vdJIb","autosuggest-input-container":"styles_autosuggest-input-container__C4ks3",origin:"styles_origin__J6GD2",destination:"styles_destination__yOA4k","stop-route-station":"styles_stop-route-station__ofvbR","autosuggest-input-icon":"styles_autosuggest-input-icon__-XA83","origin-stop-near-you":"styles_origin-stop-near-you__Vq9IO","clear-input":"styles_clear-input__KFeWb","sr-only":"styles_sr-only__FIitE"};Pe("input[type=text] {\n margin: 0;\n}\n\n.styles_container__CyBuz {\n display: flex;\n width: 100%;\n}\n.styles_container__CyBuz .styles_input__x7Oye.styles_favourite__xn1Du {\n padding-left: 47px;\n}\n.styles_container__CyBuz .styles_input__x7Oye.styles_thin__ToA7- {\n height: 34px;\n}\n.styles_container__CyBuz .styles_input__x7Oye {\n font-size: 16px;\n font-family: var(--font-family);\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 -webkit-appearance: none;\n appearance: none;\n}\n.styles_container__CyBuz .styles_input__x7Oye:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: 0 0 2px 1px var(--hover-color);\n}\n@media screen and (min-width: 768px) {\n .styles_container__CyBuz .styles_input__x7Oye {\n font-size: 15px;\n height: 44px;\n padding-left: 49px;\n }\n}\n.styles_container__CyBuz .styles_input__x7Oye::-webkit-input-placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n.styles_container__CyBuz .styles_input__x7Oye::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px;\n}\n\n.styles_hasValue__qkIFF {\n color: #333;\n}\n\n.styles_suggestionsContainerOpen__1odqA {\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(2.625rem + 9px);\n z-index: 20;\n}\n\n.styles_suggestionsContainer__-FUbj {\n background-color: white;\n z-index: 20;\n}\n.styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white;\n}\n.styles_suggestionsContainer__-FUbj .styles_suggestionsList__e-mac li:hover {\n background: #f2f5f7;\n}\n\n.styles_suggestion__oCpdb {\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 z-index: 20;\n}\n\n.styles_suggestionHighlighted__vdJIb {\n background-color: #f2f5f7;\n}\n\n.styles_autosuggest-input-container__C4ks3 {\n position: relative;\n width: 100%;\n}\n.styles_autosuggest-input-container__C4ks3.styles_origin__J6GD2 {\n z-index: 16;\n}\n.styles_autosuggest-input-container__C4ks3.styles_destination__yOA4k {\n z-index: 10;\n}\n.styles_autosuggest-input-container__C4ks3.styles_stop-route-station__ofvbR {\n z-index: 9;\n}\n\n.styles_autosuggest-input-icon__-XA83 {\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}\n.styles_autosuggest-input-icon__-XA83 svg {\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_origin__J6GD2 svg {\n fill: #4ea700;\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_destination__yOA4k svg {\n fill: #ec5188;\n width: 16px;\n height: 24px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_stop-route-station__ofvbR svg, .styles_autosuggest-input-icon__-XA83.styles_favourite__xn1Du svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\n.styles_autosuggest-input-icon__-XA83.styles_origin-stop-near-you__Vq9IO svg {\n fill: #888;\n width: 16px;\n height: 16px;\n}\n\nbutton.styles_clear-input__KFeWb {\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}\nbutton.styles_clear-input__KFeWb svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.styles_clear-input__KFeWb: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}\nbutton.styles_clear-input__KFeWb:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.styles_clear-input__KFeWb:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.styles_sr-only__FIitE:not(:focus, :active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}");const Ie=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Le=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Ne=R.default((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return u=e.name,n=e.address,[u||n&&n.split(",")[0],"string"==typeof n?n.replace(new RegExp(`${I.default(u)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[e.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!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${I.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],Ie(e)]:[e.name,e.id,Le(e),Ie(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Ie(e)]}var u,n},(e,t)=>{const u=L.default(e);return u.plain=t,u});const qe=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},ze=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,Te=(e,t,u)=>{if(!u)return;if(!e||!e.GTFS.platform)return;const{modes:n,platform:o}=e.GTFS;return[n&&"RAIL"===n[0]?u("track",{lng:t}):u("platform",{lng:t}),o]};function He(e,t,u){if(!u)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",u("select-from-map",{lng:t})];if("CurrentLocation"===e.type)return["",u("use-own-position",{lng:t})];if("SelectFromOwnLocations"===e.type)return["",u("select-from-own-locations",{lng:t})];let o,[r,i]=Ne(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=u("vehiclerentalstation",{lng:t});return[o,r,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=u("bikepark",{lng:t}),[o,r,void 0,void 0];if("carpark"===e.properties.layer)return o=u("carpark",{lng:t}),[o,r,void 0,void 0];if(e.properties.mode)o=u(e.properties.mode.toLowerCase().replace("favourite",""),{lng:t});else{o=u(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:t})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var n;const a=Le(e.properties),s=null===(n=e.properties.addendum)||void 0===n?void 0:n.GTFS.modes,l=Te(e.properties.addendum,t,u);return[o,be(r,a),i,a,s,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:u,code:n}=e.properties;return[o,u?be(u.split(",")[0],n):r,i,n,void 0,Te(e.properties.addendum,t)]}return[o,r,i]}const{origin:o,destination:r}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",a=r.locality?`, ${r.locality}`:"",s=o.name,l=r.name;return[u("future-route",{lng:t}),`${u("origin",{lng:t})} ${s}${i} ${u("destination",{lng:t})} ${l}${a}`,e.translatedText]}function Ue(e,t,u){if(!u)return;const n=m.DateTime.fromSeconds(Number(e.properties.time)),o=m.DateTime.now();let r=e.properties.arriveBy?u("arrival",{lng:t}):u("departure",{lng:t});return r=n.hasSame(o,"day")?`${r} ${u("today-at")}`:n.hasSame(o.plus({days:1}),"day")?`${r} ${u("tomorrow-at",{lng:t})}`:`${r} ${n.toFormat("ccc d.L.")}`,r=`${r} ${n.toFormat("HH:mm")}`,r}const Ve=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=Ne(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return t[1]||t[0];case"favouriteVehicleRentalStation":case"favouritePlace":return t[0];default:return t.length>1&&""!==t[1]?t.join(", "):t[1]||t[0]}}(e.properties),We=({suggestions:e,t:t,lng:u})=>{let n=[];const o=e[0];return o&&(o.type&&o.type.includes("Favourite")&&n.push(t("favourite",{lng:u})),n=n.concat(He(e[0],u))),[...new Set(n)].join(" - ")};function Ge(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var $e,Qe={exports:{}};
2
+ /*! For license information please see index.js.LICENSE.txt */var Ke=($e||($e=1,function(e){var t;"undefined"!=typeof self&&self,e.exports=(t=v.default,function(){var e={888:function(e,t,u){var n,o;o=void 0!==u.g?u.g:"undefined"!=typeof window?window:this,n=function(){return function(e){var t={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},u=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var u in t){if(!t.hasOwnProperty(u))return;e[u]=t[u]}}),e},n=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,u=String(e),n=u.length,o=-1,r="",i=u.charCodeAt(0);++o<n;){if(0===(t=u.charCodeAt(o)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");r+=t>=1&&t<=31||127==t||0===o&&t>=48&&t<=57||1===o&&t>=48&&t<=57&&45===i?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?u.charAt(o):"\\"+u.charAt(o)}return"#"+r},o=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},r=function(t){return t?(u=t,parseInt(e.getComputedStyle(u).height,10)+t.offsetTop):0;var u},i=function(t,u,n){0===t&&document.body.focus(),n||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,u))},a=function(t,u,n,o){if(u.emitEvents&&"function"==typeof e.CustomEvent){var r=new CustomEvent(t,{bubbles:!0,detail:{anchor:n,toggle:o}});document.dispatchEvent(r)}};return function(s,l){var c,d,p,g,f={cancelScroll:function(e){cancelAnimationFrame(g),g=null,e||a("scrollCancel",c)},animateScroll:function(n,s,l){f.cancelScroll();var d=u(c||t,l||{}),h="[object Number]"===Object.prototype.toString.call(n),b=h||!n.tagName?null:n;if(h||b){var E=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var A,m,y,F=r(p),D=h?n:function(t,u,n,r){var i=0;if(t.offsetParent)do{i+=t.offsetTop,t=t.offsetParent}while(t);return i=Math.max(i-u-n,0),r&&(i=Math.min(i,o()-e.innerHeight)),i}(b,F,parseInt("function"==typeof d.offset?d.offset(n,s):d.offset,10),d.clip),C=D-E,_=o(),v=0,B=function(e,t){var u=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&u>t.durationMax?t.durationMax:t.durationMin&&u<t.durationMin?t.durationMin:parseInt(u,10)}(C,d),S=function(t){A||(A=t),v+=t-A,y=E+C*function(e,t){var u;return"easeInQuad"===e.easing&&(u=t*t),"easeOutQuad"===e.easing&&(u=t*(2-t)),"easeInOutQuad"===e.easing&&(u=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(u=t*t*t),"easeOutCubic"===e.easing&&(u=--t*t*t+1),"easeInOutCubic"===e.easing&&(u=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(u=t*t*t*t),"easeOutQuart"===e.easing&&(u=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(u=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(u=t*t*t*t*t),"easeOutQuint"===e.easing&&(u=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(u=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(u=e.customEasing(t)),u||t}(d,m=(m=0===B?0:v/B)>1?1:m),e.scrollTo(0,Math.floor(y)),function(t,u){var o=e.pageYOffset;if(t==u||o==u||(E<u&&e.innerHeight+o)>=_)return f.cancelScroll(!0),i(n,u,h),a("scrollStop",d,n,s),A=null,g=null,!0}(y,D)||(g=e.requestAnimationFrame(S),A=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,u){t||history.pushState&&u.updateURL&&history.pushState({smoothScroll:JSON.stringify(u),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(n,h,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?i(n,Math.floor(D),!1):(a("scrollStart",d,n,s),f.cancelScroll(!0),e.requestAnimationFrame(S))}}},h=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(s))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var u,o;try{u=n(decodeURIComponent(d.hash))}catch(e){u=n(d.hash)}if("#"===u){if(!c.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(u);(o=o||"#top"!==u?o:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var u=e.location.hash;u=u||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:u||e.pageYOffset},document.title,u||e.location.href)}}(c),f.animateScroll(o,d))}},b=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(n(history.state.anchor)))||f.animateScroll(t,null,{updateURL:!1})}};return f.destroy=function(){c&&(document.removeEventListener("click",h,!1),e.removeEventListener("popstate",b,!1),f.cancelScroll(),c=null,d=null,p=null,g=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";f.destroy(),c=u(t,l||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",h,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),f}}(o)}.apply(t,[]),void 0===n||(e.exports=n)},432:function(e,t,u){var n=this&&this.__createBinding||(Object.create?function(e,t,u,n){void 0===n&&(n=u),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[u]}})}:function(e,t,u,n){void 0===n&&(n=u),e[n]=t[u]}),o=this&&this.__exportStar||function(e,t){for(var u in e)"default"===u||Object.prototype.hasOwnProperty.call(t,u)||n(t,e,u)};Object.defineProperty(t,"__esModule",{value:!0}),o(u(47),t),o(u(926),t),o(u(349),t),o(u(137),t),o(u(729),t),o(u(383),t),o(u(450),t),o(u(358),t),o(u(753),t),o(u(869),t),o(u(352),t),o(u(446),t),o(u(164),t),o(u(305),t),o(u(502),t)},349:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var n=u(156);t.useArrowNavigation=function(e){var t=e.listItems,u=e.onArrowUpOrDown,o=(0,n.useState)(0),r=o[0],i=o[1],a=(0,n.useCallback)(function(e){i(e)},[t]),s=function(e){var n=e.key;if(null==t?void 0:t.length)if("ArrowUp"===n)u&&u(),e.preventDefault(),a(r>0?r-1:t.length-1);else{if("ArrowDown"!==n)return;u&&u(),e.preventDefault(),r<t.length-1?a(r+1):a(0)}};return(0,n.useEffect)(function(){return window.addEventListener("keydown",s),function(){return window.removeEventListener("keydown",s)}}),(0,n.useEffect)(function(){a(0)},[t]),{selectedIndex:r}}},446:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var n=u(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var u=(0,n.useState)(e),o=u[0],r=u[1];return(0,n.useEffect)(function(){var u=setTimeout(function(){r(e)},t);return function(){clearTimeout(u)}},[e,t]),o}},164:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var n=u(156);t.useElementSize=function(){var e,t,u=(0,n.useRef)(null);return[u,{width:null===(e=null==u?void 0:u.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==u?void 0:u.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var n=u(156);t.useIntersectionObserver=function(e){var t=(0,n.useRef)(null),u=(0,n.useState)(!1),o=u[0],r=u[1],i=function(e){var t=e[0];r(t.isIntersecting)};return(0,n.useEffect)(function(){if(window&&window.IntersectionObserver){var u=new IntersectionObserver(i,e),n=t.current;return t.current&&u.observe(t.current),function(){n&&u.unobserve(n)}}r(!1)},[t,e]),{containerRef:t,isVisible:o}},t.default=t.useIntersectionObserver},729:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var n=u(156),o=u(432),r={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?r[e]:e,u=(0,n.useState)(null),i=u[0],a=u[1],s=(0,n.useCallback)(function(){a(window.innerWidth)},[]);return(0,n.useEffect)(function(){s()},[]),(0,o.useOnResize)(s),i>=t},t.default=t.useIsBreakpoint},450:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var n=u(156);t.useIsLoadingAfterError=function(e,t){var u=(0,n.useState)(t),o=u[0],r=u[1];return(0,n.useEffect)(function(){e||r(t)},[e,t]),e&&o}},305:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var n=u(729);t.useIsMobile=function(){return!(0,n.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var n=u(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?n.useLayoutEffect:n.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var n=u(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,u=e.callback,o=e.watch;(0,n.useEffect)(function(){var e=function(){var e;if(o)return(null===(e=t.current)||void 0===e?void 0:e.matches(":focus-within"))?void 0:u()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}},[u,t,o])},t.default=t.useOnLoseFocusWithin},502:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var n=u(156);t.useOnResize=function(e){(0,n.useEffect)(function(){var t=function(){e(window.innerWidth)};return window.addEventListener("resize",t,{passive:!0}),function(){return window.removeEventListener("resize",t)}},[])},t.default=t.useOnResize},352:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var n=u(156);t.useOnWindowFocus=function(e){(0,n.useEffect)(function(){var t=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",t,!1),function(){return window.removeEventListener("visibilitychange",t)}},[e])}},47:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var n=u(156);t.useOutsideReacter=function(e,t){function u(u){e.current&&!e.current.contains(u.target)&&t()}(0,n.useEffect)(function(){return document.addEventListener("mousedown",u),function(){document.removeEventListener("mousedown",u)}})}},869:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var n=u(156);t.useRunAfterUpdate=function(){var e=(0,n.useRef)(null);return(0,n.useEffect)(function(){e.current&&(e.current(),e.current=null)}),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,u){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var n=u(156);t.useScrollLock=function(){return{lock:(0,n.useCallback)(function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e},[]),unlock:(0,n.useCallback)(function(){var e=document.body,t=e.style.top,u=-1*parseInt(t||"0");e.style.position="",e.style.top="",u&&window.scrollTo(0,-1*parseInt(t||"0"))},[])}}},358:function(e,t,u){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var o=u(156),r=n(u(888));t.useSmoothScroll=function(e){var t=(0,o.useRef)(null),u=e.ref,n=e.offset,i=void 0===n?0:n,a=e.speed,s=void 0===a?500:a;return(0,o.useEffect)(function(){t.current=new r.default(null,{speed:s,speedAsDuration:!0})},[]),(0,o.useCallback)(function(){u&&t.current&&t.current.animateScroll(u.current,null,{offset:function(){return i},updateURL:!1})},[i,u])}},156:function(e){e.exports=t}},u={};function n(t){var o=u[t];if(void 0!==o)return o.exports;var r=u[t]={exports:{}};return e[t].call(r.exports,r,r.exports,n),r.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(432)}())}(Qe)),Qe.exports),Xe=Ge(Ke),Ze={"fullscreen-root":"MobileSearch_fullscreen-root__l90DZ","combobox-container":"MobileSearch_combobox-container__UsUQ2","right-column":"MobileSearch_right-column__QT0kp","combobox-icon":"MobileSearch_combobox-icon__3syCw","combobox-label":"MobileSearch_combobox-label__mRQMF",container:"MobileSearch_container__JtL5q",input:"MobileSearch_input__Sjo1c","clear-input":"MobileSearch_clear-input__SGpE8",hasValue:"MobileSearch_hasValue__H1RPq",suggestion:"MobileSearch_suggestion__pqOkM",suggestionHighlighted:"MobileSearch_suggestionHighlighted__xpMMN",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__wwyZk",suggestionsList:"MobileSearch_suggestionsList__-pWWC","clear-search-history":"MobileSearch_clear-search-history__cO30c","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__bH39q","mobile-modal":"MobileSearch_mobile-modal__DFUUM","mobile-modal-content":"MobileSearch_mobile-modal-content__7q4zK"};Pe("input[type=text] {\n margin: 0;\n padding: 0;\n}\n\n.MobileSearch_fullscreen-root__l90DZ {\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\n.MobileSearch_combobox-container__UsUQ2 {\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}\n.MobileSearch_combobox-container__UsUQ2 .MobileSearch_right-column__QT0kp {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px;\n}\n\n.MobileSearch_combobox-icon__3syCw {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none;\n}\n.MobileSearch_combobox-icon__3syCw svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\n\n.MobileSearch_combobox-label__mRQMF {\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\n.MobileSearch_container__JtL5q {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c {\n font-family: var(--font-family);\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 -webkit-appearance: none;\n appearance: none;\n}\n.MobileSearch_container__JtL5q .MobileSearch_input__Sjo1c:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n\nbutton.MobileSearch_clear-input__SGpE8 {\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}\nbutton.MobileSearch_clear-input__SGpE8 svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileSearch_clear-input__SGpE8:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__SGpE8:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileSearch_clear-input__SGpE8:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_hasValue__H1RPq {\n color: #333;\n}\n\n.MobileSearch_suggestion__pqOkM {\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\n.MobileSearch_suggestionHighlighted__xpMMN {\n background-color: #f2f5f7;\n}\n\n.MobileSearch_suggestionsContainerOpen__wwyZk {\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}\n.MobileSearch_suggestionsContainerOpen__wwyZk .MobileSearch_suggestionsList__-pWWC {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7;\n}\n\n.MobileSearch_clear-search-history__cO30c {\n display: flex;\n font-family: var(--font-family);\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f2f5f7;\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_suggestionHighlighted__xpMMN .MobileSearch_clear-search-history__cO30c {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileSearch_mobile-modal-overlay__bH39q {\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\n.MobileSearch_mobile-modal__DFUUM {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileSearch_mobile-modal__DFUUM.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileSearch_mobile-modal__DFUUM.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\n\n.MobileSearch_mobile-modal-content__7q4zK {\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 Je={"fullscreen-root":"MobileNoScroll_fullscreen-root__fZbOA","combobox-container":"MobileNoScroll_combobox-container__9Q02x","right-column":"MobileNoScroll_right-column__Hk-62","combobox-icon":"MobileNoScroll_combobox-icon__WlXar","combobox-label":"MobileNoScroll_combobox-label__oeVbH",container:"MobileNoScroll_container__veReP",input:"MobileNoScroll_input__zo9Gg","clear-input":"MobileNoScroll_clear-input__lQlxs",hasValue:"MobileNoScroll_hasValue__1Gx3J",suggestion:"MobileNoScroll_suggestion__hTxDr",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__zxzXj",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__sX1RA",suggestionsList:"MobileNoScroll_suggestionsList__wXJTV","clear-search-history":"MobileNoScroll_clear-search-history__vR2Xw","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__Qw6Np","mobile-modal":"MobileNoScroll_mobile-modal__xYuHh","mobile-modal-content":"MobileNoScroll_mobile-modal-content__0Ft4g"};function Ye(e,t){if(null==e)return{};var u,n,o=function(e,t){if(null==e)return{};var u={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;u[n]=e[n]}return u}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)u=r[n],-1===t.indexOf(u)&&{}.propertyIsEnumerable.call(e,u)&&(o[u]=e[u])}return o}Pe("input[type=text] {\n margin: 0;\n padding: 0;\n}\n\n.MobileNoScroll_fullscreen-root__fZbOA {\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\n.MobileNoScroll_combobox-container__9Q02x {\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}\n.MobileNoScroll_combobox-container__9Q02x .MobileNoScroll_right-column__Hk-62 {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px;\n}\n\n.MobileNoScroll_combobox-icon__WlXar {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none;\n}\n.MobileNoScroll_combobox-icon__WlXar svg {\n width: 14px;\n height: 21px;\n transform: rotate(-180deg);\n}\n\n.MobileNoScroll_combobox-label__oeVbH {\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\n.MobileNoScroll_container__veReP {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg {\n font-family: var(--font-family);\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 -webkit-appearance: none;\n appearance: none;\n}\n.MobileNoScroll_container__veReP .MobileNoScroll_input__zo9Gg:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n\nbutton.MobileNoScroll_clear-input__lQlxs {\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}\nbutton.MobileNoScroll_clear-input__lQlxs svg {\n fill: var(--color);\n width: 16px;\n height: 16px;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:focus {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:active {\n background-color: transparent;\n color: inherit;\n}\nbutton.MobileNoScroll_clear-input__lQlxs:hover {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_hasValue__1Gx3J {\n color: #333;\n}\n\n.MobileNoScroll_suggestion__hTxDr {\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\n.MobileNoScroll_suggestionHighlighted__zxzXj {\n background-color: #f2f5f7;\n}\n\n.MobileNoScroll_suggestionsContainerOpen__sX1RA {\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}\n.MobileNoScroll_suggestionsContainerOpen__sX1RA .MobileNoScroll_suggestionsList__wXJTV {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f2f5f7;\n}\n\n.MobileNoScroll_clear-search-history__vR2Xw {\n display: flex;\n font-family: var(--font-family);\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f2f5f7;\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_suggestionHighlighted__zxzXj .MobileNoScroll_clear-search-history__vR2Xw {\n background-color: transparent;\n color: inherit;\n}\n\n.MobileNoScroll_mobile-modal-overlay__Qw6Np {\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\n.MobileNoScroll_mobile-modal__xYuHh {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n.MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--after-open > div {\n transform: translateY(0);\n}\n.MobileNoScroll_mobile-modal__xYuHh.ReactModal__Content--before-close > div {\n transform: translateY(10%);\n}\n\n.MobileNoScroll_mobile-modal-content__0Ft4g {\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\n.MobileNoScroll_suggestionsContainerOpen__sX1RA {\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n}\n.MobileNoScroll_suggestionsContainerOpen__sX1RA::-webkit-scrollbar {\n display: none; /* Safari and Chrome */\n}");const et=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],tt=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function ut(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function nt(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?ut(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):ut(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}function ot(e){let{item:t,lng:u,getItemProps:o,highlightedIndex:r,itemIndex:i,styles:a}=e,s=Ye(e,et);const[l]=n.useTranslation(),c="FutureRoute"===t.type?nt(nt({},t),{},{translatedText:Ue(t,u,l)}):t,d=He(t,u,l);return v.default.createElement("li",Object.assign({className:B.default(a.suggestion,r===i&&a.suggestionHighlighted)},o({index:i})),v.default.createElement(z.default,Object.assign({item:c,content:d,lng:u},s)))}const rt="production"!==process.env.NODE_ENV?_.default.shape({name:_.default.string,type:_.default.string,address:_.default.string,selectedIconId:_.default.string,iconColor:_.default.string,translatedText:_.default.string,properties:_.default.shape({layer:_.default.string,color:_.default.string,localadmin:_.default.string,mode:_.default.string,id:_.default.string,source:_.default.string,arrowClicked:_.default.bool,destination:_.default.shape({name:_.default.string,localadmin:_.default.string}),origin:_.default.shape({name:_.default.string,localadmin:_.default.string})})}):{};function it(e){let{suggestions:t,getMenuProps:u,getItemProps:o,lng:r,styles:i,hidden:a,renderClearHistoryButton:s,handleClearHistory:l}=e,c=Ye(e,tt);const[d]=n.useTranslation();return v.default.createElement("div",{className:B.default(i.suggestionsContainerOpen,i.suggestionsContainer,a&&"hidden")},v.default.createElement("ul",Object.assign({className:i.suggestionsList},u()),t.map((e,t)=>v.default.createElement(ot,Object.assign({key:`${e.type}-${e.properties.gid||e.properties.name||e.properties.gtfsId}`,getItemProps:o,itemIndex:t,item:e,lng:r,styles:i},c))),s&&v.default.createElement("li",o({index:t.length}),v.default.createElement("button",{onClick:l,type:"button",className:i["clear-search-history"]},d("clear-search-history",{lng:r})))))}"production"!==process.env.NODE_ENV&&(ot.propTypes={item:rt.isRequired,lng:_.default.string.isRequired,getItemProps:_.default.func.isRequired,highlightedIndex:_.default.number.isRequired,itemIndex:_.default.number.isRequired,styles:_.default.objectOf(_.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(it.propTypes={suggestions:_.default.arrayOf(rt).isRequired,getMenuProps:_.default.func.isRequired,getItemProps:_.default.func.isRequired,lng:_.default.string.isRequired,styles:_.default.objectOf(_.default.string).isRequired,hidden:_.default.bool.isRequired,renderClearHistoryButton:_.default.bool,handleClearHistory:_.default.func}),it.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const at=({color:e,lng:t,clearInput:u,onKeyDown:o,styles:r})=>{const[i]=n.useTranslation();return v.default.createElement("button",{type:"button",className:r["clear-input"],onClick:u,"aria-label":i("clear-button-label",{lng:t}),onKeyDown:o},v.default.createElement(P.default,{img:"close",color:e}))};function st({id:e,lng:t,value:u,placeholder:n,required:o,getInputProps:r,getLabelProps:i,clearInput:a,ariaLabel:s,inputRef:l,styles:c,renderLabel:d,isMobile:p,inputClassName:g,transportMode:f,clearButtonColor:h,autoFocus:b,inputOnBlur:E}){return v.default.createElement("div",{className:c.container},d&&v.default.createElement("label",i({className:c["sr-only"],htmlFor:e}),s),v.default.createElement("input",Object.assign({"aria-label":s,autoFocus:b,placeholder:n,required:o,type:"text",className:B.default(c.input,c[e],g,p&&f&&c.thin,u&&c.hasValue),value:u,id:e},r({ref:l,onBlur:E}))),u&&v.default.createElement(at,{lng:t,clearInput:()=>a(l),styles:c,color:h,onKeyDown:e=>qe(e)&&a(l)}))}function lt(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function ct(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?lt(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):lt(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}"production"!==process.env.NODE_ENV&&(at.propTypes={color:_.default.string.isRequired,lng:_.default.string.isRequired,clearInput:_.default.func.isRequired,onKeyDown:_.default.func.isRequired,styles:_.default.objectOf(_.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(st.propTypes={id:_.default.string.isRequired,lng:_.default.string.isRequired,placeholder:_.default.string.isRequired,required:_.default.bool.isRequired,value:_.default.string.isRequired,getInputProps:_.default.func.isRequired,getLabelProps:_.default.func.isRequired,clearInput:_.default.func.isRequired,ariaLabel:_.default.string.isRequired,inputRef:_.default.shape({current:_.default.oneOfType([_.default.string,_.default.object])}).isRequired,styles:_.default.objectOf(_.default.string).isRequired,renderLabel:_.default.bool,isMobile:_.default.bool.isRequired,inputClassName:_.default.string.isRequired,transportMode:_.default.string,clearButtonColor:_.default.string.isRequired,autoFocus:_.default.bool,inputOnBlur:_.default.func}),st.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const dt=({appElement:e,id:t,placeholder:o,clearInput:r,onSelectedItemChange:i,fontWeights:a,clearOldSearches:s,suggestionProps:l,lng:c,ariaProps:d,value:g,inputClassName:f,required:h,mobileLabel:b,showScroll:E,state:A,dispatch:m,colors:y})=>{const[F]=n.useTranslation(),{lock:D,unlock:C}=Xe.useScrollLock(),_=E?Ze:Je,B=`${t}-input`,S=`${t}-label`,[k,w]=u.useState(!1),x=v.default.useRef();u.useEffect(()=>{N.default.setAppElement(e)},[]),u.useEffect(()=>{A.renderMobile?D():C()},[A.renderMobile]);const{highlightedIndex:O,getLabelProps:j,getMenuProps:M,getInputProps:R,getItemProps:I,setHighlightedIndex:L}=p.useCombobox({items:A.suggestions,inputValue:g,isOpen:!0,onSelectedItemChange:e=>{i(e),m({type:"TOGGLE_MENU",isMobile:!0})},inputId:B,labelId:S,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e})=>A.renderMobile&&m({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:t,type:u})=>{switch(u){case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return L(-1),m({type:"TOGGLE_MENU",isMobile:!0}),e;case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return A.loading?(m({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?ct(ct({},t),{},{selectedItem:A.suggestions[0]}):t;case p.useCombobox.stateChangeTypes.InputBlur:return e;default:return t}},itemToString:e=>e?Ve(e):""});j({},{suppressRefError:!0}),M({},{suppressRefError:!0}),R({},{suppressRefError:!0}),I({index:-1},{suppressRefError:!0});const{ariaRequiredText:z,SearchBarId:T,ariaCurrentSuggestion:H}=d,U=z.concat(" ").concat(T).concat(" ").concat(H);return v.default.createElement(N.default,{isOpen:A.renderMobile,className:_["mobile-modal"],overlayClassName:_["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},v.default.createElement("div",{className:_["mobile-modal-content"],style:{"--color":y.primary,"--accessible-primary-color":y.accessiblePrimary,"--hover-color":y.hover,"--font-weight-medium":a.medium}},v.default.createElement("div",{className:_["combobox-container"],htmlFor:B},v.default.createElement("button",{type:"button",className:_["combobox-icon"],onClick:()=>{L(-1),m({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{qe(e)&&(L(-1),m({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":F("cancel",{lng:c}),tabIndex:0},v.default.createElement(P.default,{img:"arrow",color:y.primary})),v.default.createElement("span",{className:_["right-column"]},v.default.createElement("span",Object.assign({className:_["combobox-label"],id:S},j()),b),v.default.createElement(st,{placeholder:ze(t)?F("address-place-or-business",{lng:c}):o,id:t,lng:c,value:g,getInputProps:R,getLabelProps:j,clearInput:()=>r(x),ariaLabel:U,inputRef:x,styles:_,renderLabel:!1,clearButtonColor:y.primary,autoFocus:!0,inputClassName:f,required:h,isMobile:!0}),v.default.createElement(it,Object.assign({suggestions:A.suggestions,getMenuProps:M,getItemProps:I,highlightedIndex:O,isOpen:!0,hidden:!1,lng:c,styles:_,renderClearHistoryButton:!0,handleClearHistory:()=>w(!0)},l)))),v.default.createElement(q.default,{appElement:e,isModalOpen:k,handleClose:()=>w(!1),headerText:F("delete-old-searches-header",{lng:c}),primaryButtonText:F("delete",{lng:c}),secondaryButtonText:F("cancel",{lng:c}),primaryButtonOnClick:()=>{s(),w(!1)},secondaryButtonOnClick:()=>w(!1),colors:y,fontWeights:a,lang:c})))};function pt(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function gt(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):pt(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}"production"!==process.env.NODE_ENV&&(dt.propTypes={appElement:_.default.string.isRequired,id:_.default.string.isRequired,clearInput:_.default.func.isRequired,clearOldSearches:_.default.func.isRequired,onSelectedItemChange:_.default.func.isRequired,value:_.default.string.isRequired,colors:_.default.objectOf(_.default.string).isRequired,fontWeights:_.default.shape({medium:_.default.number.isRequired}).isRequired,suggestionProps:_.default.shape({}).isRequired,ariaProps:_.default.shape({ariaRequiredText:_.default.string.isRequired,SearchBarId:_.default.string.isRequired,ariaCurrentSuggestion:_.default.string.isRequired}).isRequired,inputClassName:_.default.string.isRequired,placeholder:_.default.string.isRequired,mobileLabel:_.default.string.isRequired,required:_.default.bool.isRequired,showScroll:_.default.bool.isRequired,lng:_.default.string.isRequired,state:_.default.shape({suggestions:_.default.arrayOf(_.default.shape({})).isRequired,renderMobile:_.default.bool.isRequired,loading:_.default.bool.isRequired}).isRequired,dispatch:_.default.func.isRequired});const ft=(e,t)=>{switch(t.type){case"INPUT_CHANGE":return gt(gt({},e),{},{value:t.value});case"FETCH_SUGGESTIONS":return gt(gt({},e),{},{loading:t.loading,suggestions:t.suggestions||e.suggestions});case"CLEAR_SUGGESTIONS":return gt(gt({},e),{},{suggestions:[]});case"RESET_SOURCES":return gt(gt({},e),{},{sources:t.sources});case"SET_SOURCES":return gt(gt({},e),{},{showOwnPlaces:t.showOwnPlaces,sources:t.sources,pendingSelection:t.pendingSelection});case"CLEAR":return gt(gt({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return gt(gt({},e),{},{value:t.value||e.value,isCleared:!t.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return t.initialState;case"PENDING_ENTER":return gt(gt({},e),{},{enterPending:t.enterPending});case"TOGGLE_MENU":return t.isMobile?e.renderMobile?gt(gt({},e),{},{renderMobile:!1,isCleared:!1}):gt(gt({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):gt(gt({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:t.isMobile&&!e.renderMobile});default:return e}};function ht(e,t){var u=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),u.push.apply(u,n)}return u}function bt(e){for(var t=1;t<arguments.length;t++){var u=null!=arguments[t]?arguments[t]:{};t%2?ht(Object(u),!0).forEach(function(t){U(e,t,u[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(u)):ht(Object(u)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(u,t))})}return e}const Et=["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"];function At({appElement:e,id:t,placeholder:o,onSelect:r,icon:i,value:a,onClear:s,lang:l,getAutoSuggestIcons:c,handleViaPoints:d,focusChange:g,storeRef:f,isMobile:h,mobileLabel:b,inputClassName:E,translatedPlaceholder:A,required:m,ariaLabel:y,fontWeights:F,colors:D,modeSet:C,showScroll:_,isEmbedded:S,transportMode:k,targets:w,sources:x,geocodingSize:O,filterResults:j,searchContext:M,pathOpts:R,refPoint:I}){const[L]=n.useTranslation(),N={suggestions:[],loading:!1,sources:x,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:a,enterPending:!1,isMenuOpen:!1},[q,z]=u.useReducer(ft,N);u.useEffect(()=>z({type:"RESET",initialState:N}),[a]),u.useEffect(()=>z({type:"RESET_SOURCES",sources:x}),[x]);const T=u.useRef(t);u.useEffect(()=>{f&&f(T.current)},[T.current]);const H=u.useCallback(()=>{const e=!(null!=w&&w.length)||w.includes("Locations"),t=(({targets:e,isLocationSearch:t,isMobile:u,ownPlaces:n,sources:o})=>{const r=!(null!=e&&e.length);let i;return n?(i=["Locations"],(r||e.includes("Stops"))&&i.push("Stops"),(r||e.includes("Stations"))&&i.push("Stations"),(r||e.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):r||(i=[...e],!t||u||o.length&&!o.includes("Favourite")||i.push("SelectFromOwnLocations")),i})({targets:w,isLocationSearch:e,isMobile:h,ownPlaces:q.showOwnPlaces,sources:q.sources});((e,t,u,n,o,r,i,a,s,l)=>{a(null),je(e,t,u,n,o,r,i,a,s,l)})(t,q.sources?q.sources.filter(t=>!e||"Favourite"===!t||q.showOwnPlaces||h):q.sources,k,M,j,O,{input:q.value||""},e=>{if(null==e)return void z({type:"FETCH_SUGGESTIONS",loading:!0});const t=(e.results||[]).filter(e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>Date.now()/1e3).map(e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const t=bt({},e);return t.properties.labelId=L(e.properties.labelId,{lng:l}),t}return e});z({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:t})},R,I)},[q.value,q.sources,q.showOwnPlaces,w,k,M,j,O,h,l,R,I,t]),U=u.useCallback((e,u)=>{e&&(d?d(e,u):r(e,t),!g||h&&!S||g(),T.current&&T.current.blur())},[h]),V=e=>U(e.selectedItem,e.highlightedIndex),{isOpen:W,highlightedIndex:G,getLabelProps:$,getMenuProps:Q,getInputProps:K,getItemProps:X,selectItem:Z,openMenu:J,closeMenu:Y}=p.useCombobox({inputId:t,inputValue:q.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e})=>z({type:"INPUT_CHANGE",value:e}),stateReducer:u.useCallback((e,{type:t,changes:u})=>{switch(t){case p.useCombobox.stateChangeTypes.ItemClick:case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return q.loading?(z({type:"PENDING_ENTER",enterPending:!0}),e):u.selectedItem?"SelectFromOwnLocations"===u.selectedItem.type?(z({type:"SET_SOURCES",sources:["Favourite","Back"],showOwnPlaces:!0,pendingSelection:u.selectedItem.type}),e):"back"===u.selectedItem.type?(z({type:"SET_SOURCES",sources:x,showOwnPlaces:!1,pendingSelection:null}),e):u:u;case p.useCombobox.stateChangeTypes.InputClick:return Et.includes(a)?bt(bt({},u),{},{inputValue:"",isOpen:!0}):bt(bt({},u),{},{isOpen:!0});case p.useCombobox.stateChangeTypes.InputBlur:return u.selectedItem?bt(bt({},u),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):u;case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return bt(bt({},u),{},{inputValue:""});default:return u}},[q.loading,a,h]),items:q.suggestions,itemToString:e=>e?Ve(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!q.renderMobile&&z({type:"TOGGLE_MENU",isMobile:h})}}),ee=e=>{z({type:"CLEAR"}),s&&s(t),e.current&&e.current.focus(),J()};u.useEffect(()=>{(W||q.renderMobile)&&H(q.value)},[W,q.renderMobile,q.value,H]),u.useEffect(()=>{q.enterPending&&!q.loading&&(U(q.suggestions[0],0),Y())},[q.loading,q.pendingEnter,q.suggestions]);const te={loading:q.loading,isMobile:h,ariaFavouriteString:L("favourite",{lng:l}),fontWeights:F,getAutoSuggestIcons:c,colors:D,modeSet:C},{ariaCurrentSuggestion:ue,ariaRequiredText:ne,SearchBarId:oe,ariaLabelText:re}=(({id:e,ariaLabel:t,lng:u,t:n,isMobile:o,suggestions:r,value:i,required:a})=>{const s=e.replace("searchfield-",""),l=t||n(s,{lng:u}).replace("searchfield-","").concat("."),c=a?`${n("required",{lng:u})}.`:"",d=n(o?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:u}),p="origin"===e?n("search-autosuggest-label-move-to-destination",{lng:u}):"";return{SearchBarId:l,ariaRequiredText:c,ariaLabelText:d.concat(" ").concat(p),ariaSuggestionLen:n("search-autosuggest-len",{count:r.length,lng:u}),ariaCurrentSuggestion:We({suggestions:r,t:n,lng:u})||i?n("search-current-suggestion",{lng:u,selection:We({suggestions:r,t:n,lng:u}).toLowerCase()||i}):""}})({id:t,lng:l,t:L,isMobile:h,ariaLabel:y,suggestions:q.suggestions,value:q.value,required:m});return u.useEffect(()=>{q.renderMobile||W||z({type:"RESET",initialState:N})},[q.renderMobile,W]),v.default.createElement(v.default.Fragment,null,h&&v.default.createElement(dt,{placeholder:L(o,{lng:l}),fontWeights:F,clearOldSearches:()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:u}=M;e&&t&&(t(e),u&&u(e),H(q.value))},appElement:e,mobileLabel:b||L(t,{lng:l}),ariaProps:{ariaCurrentSuggestion:ue,SearchBarId:oe,ariaRequiredText:ne},id:t,lng:l,onSelectedItemChange:V,value:q.value,clearInput:ee,suggestionProps:te,showScroll:!!_,colors:D,inputClassName:E,required:m,state:q,dispatch:z}),v.default.createElement("div",{className:B.default(Re["autosuggest-input-container"],Re[t],q.renderMobile&&"hidden"),style:{"--color":D.primary,"--hover-color":D.hover}},i&&v.default.createElement("div",{className:B.default(Re["autosuggest-input-icon"],Re[t],E&&Re[`${E}-input-icon`]),"aria-label":ne.concat(" ").concat(oe).concat(" ").concat(L("search-autosuggest-label",{lng:l}))},v.default.createElement(P.default,{img:`${i}`})),v.default.createElement(st,{inputClassName:E,ariaLabel:ue.concat(" ").concat(ne).concat(" ").concat(oe).concat(" ").concat(re),id:t,lng:l,getInputProps:K,getLabelProps:$,selectItem:Z,value:q.value,clearInput:ee,inputRef:T,styles:Re,clearButtonColor:D.primary,placeholder:A||L(o,{lng:l}),required:m,transportMode:k,isMobile:h,inputOnBlur:()=>{z({isMobile:h,value:!h&&a,type:"INPUT_BLUR"}),h||z({type:"RESET",initialState:N})}}),v.default.createElement(it,Object.assign({hidden:!W||h,highlightedIndex:G,getItemProps:X,getMenuProps:Q,suggestions:q.suggestions,lng:l,styles:Re},te))))}"production"!==process.env.NODE_ENV&&(At.propTypes={appElement:_.default.string.isRequired,icon:_.default.string,id:_.default.string.isRequired,placeholder:_.default.string.isRequired,translatedPlaceholder:_.default.string,value:_.default.string,transportMode:_.default.string,geocodingSize:_.default.number,filterResults:_.default.func,searchContext:_.default.shape({URL_PELIAS:_.default.string,context:_.default.object,clearOldSearches:_.default.func,clearFutureRoutes:_.default.func}).isRequired,sources:_.default.arrayOf(_.default.string),targets:_.default.arrayOf(_.default.string),ariaLabel:_.default.string,onSelect:_.default.func.isRequired,onClear:_.default.func,storeRef:_.default.func,handleViaPoints:_.default.func,focusChange:_.default.func,lang:_.default.string,isMobile:_.default.bool,pathOpts:_.default.shape({routesPrefix:_.default.string,stopsPrefix:_.default.string}),mobileLabel:_.default.string,refPoint:_.default.shape({address:_.default.string,lat:_.default.number,lon:_.default.number}),inputClassName:_.default.string,fontWeights:_.default.shape({medium:_.default.number}),colors:_.default.objectOf(_.default.string),getAutoSuggestIcons:_.default.objectOf(_.default.func),required:_.default.bool,modeSet:_.default.string,showScroll:_.default.bool,isEmbedded:_.default.bool}),At.defaultProps={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,pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},colors:g.defaultColors,required:!1,modeSet:void 0,showScroll:!1,refPoint:{}};e.default=e=>v.default.createElement(n.I18nextProvider,{i18n:Me},v.default.createElement(At,e)),Object.defineProperty(e,"__esModule",{value:!0})});
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uL3NyYy91dGlscy9pMThuLmpzIiwiLi4vc3JjL3V0aWxzL3RyYW5zbGF0aW9ucy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Boc2wtZmkvaG9va3MvbGliL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCIuLi9zcmMvY29tcG9uZW50cy9TdWdnZXN0aW9ucy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0NsZWFyQnV0dG9uLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSW5wdXQuanMiLCIuLi9zcmMvY29tcG9uZW50cy9Nb2JpbGVWaWV3LmpzIiwiLi4vc3JjL3V0aWxzL3NlYXJjaFJlZHVjZXIuanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuXG5jb25zdCBndGZzU3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJywgJ2Zhdm91cml0ZVN0b3AnLCAnZmF2b3VyaXRlU3RhdGlvbiddO1xuY29uc3QgdmVoaWNsZVJlbnRhbExheWVycyA9IFsnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLCAnYmlrZXN0YXRpb24nXTtcblxuZnVuY3Rpb24gbGFiZWxJZFRvR2lkKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFydHMgPSBpZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBgY2l0eWJpa2VzJHtwYXJ0c1swXX06YmlrZXN0YXRpb246JHtwYXJ0c1sxXX1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxhZG1pbn0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxhZG1pbn1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxhZG1pbn0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxhZG1pbn1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuY29uc3Qgc3BsaXRTaG9ydE5hbWVBdExldHRlcnMgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oXFxwe0x9KykvdSk7XG59O1xuXG5jb25zdCB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMgPSBzdHIgPT4ge1xuICByZXR1cm4gL15bMC05XStcXHB7TH0rJC91LnRlc3Qoc3RyKTtcbn07XG5cbi8qKlxuICogTGF5ZXJUeXBlIGRlcGljdHMgdGhlIHR5cGUgb2YgdGhlIHBvaW50LW9mLWludGVyZXN0LlxuICovXG5jb25zdCBMYXllclR5cGUgPSB7XG4gIEFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgQmFjazogJ2JhY2snLFxuICBDdXJyZW50UG9zaXRpb246ICdjdXJyZW50UG9zaXRpb24nLFxuICBGYXZvdXJpdGVTdG9wOiAnZmF2b3VyaXRlU3RvcCcsXG4gIEZhdm91cml0ZVN0YXRpb246ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgRmF2b3VyaXRlUGxhY2U6ICdmYXZvdXJpdGVQbGFjZScsXG4gIEZhdm91cml0ZVJvdXRlOiAnZmF2b3VyaXRlUm91dGUnLFxuICBGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJyxcbiAgRnV0dXJlUm91dGU6ICdmdXR1cmVSb3V0ZScsXG4gIFN0YXRpb246ICdzdGF0aW9uJyxcbiAgU2VsZWN0RnJvbU1hcDogJ3NlbGVjdEZyb21NYXAnLFxuICBTZWxlY3RGcm9tT3duTG9jYXRpb25zOiAnb3duTG9jYXRpb25zJyxcbiAgU3RvcDogJ3N0b3AnLFxuICBTdHJlZXQ6ICdzdHJlZXQnLFxuICBWZW51ZTogJ3ZlbnVlJyxcbiAgVmVoaWNsZVJlbnRhbFN0YXRpb246ICdiaWtlc3RhdGlvbicsXG4gIENhclBhcms6ICdjYXJwYXJrJyxcbiAgQmlrZVBhcms6ICdiaWtlcGFyaycsXG59O1xuZXhwb3J0IGNvbnN0IGlzU3RvcCA9ICh7IGxheWVyLCB0eXBlIH0pID0+XG4gIGxheWVyID09PSAnc3RvcCcgfHxcbiAgbGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICB0eXBlID09PSAnc3RvcCcgfHxcbiAgdHlwZSA9PT0gJ2Zhdm91cml0ZVN0b3AnO1xuXG5jb25zdCBERUZBVUxUX1JPVVRFU19QUkVGSVggPSAnbGluamF0JztcbmNvbnN0IERFRkFVTFRfU1RPUFNfUFJFRklYID0gJ3B5c2FraXQnO1xuXG5leHBvcnQgY29uc3QgbWFwUm91dGUgPSAoaXRlbSwgcGF0aE9wdHMpID0+IHtcbiAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRzID0gcGF0aE9wdHMgfHwge307XG5cbiAgY29uc3Qgcm91dGVzUHJlZml4ID0gb3B0cy5yb3V0ZXNQcmVmaXggfHwgREVGQVVMVF9ST1VURVNfUFJFRklYO1xuICBjb25zdCBzdG9wc1ByZWZpeCA9IG9wdHMuc3RvcHNQcmVmaXggfHwgREVGQVVMVF9TVE9QU19QUkVGSVg7XG5cbiAgY29uc3QgbGluayA9IGAvJHtyb3V0ZXNQcmVmaXh9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgIGl0ZW0uZ3Rmc0lkLFxuICApfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQgKG1pbjogMCwgbWF4OiAxLjUpLiBUaGUgYmVzdCBtYXRjaCB3aWxsIHJldHVybiBhIG51bWJlciBvZiAxLjUuXG4gKiBXb3JzZSBtYXRjaGVzIHdpbGwgcmV0dXJuIDAgb3IgMC41LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWU6IHJlc3VsdFByb3BlcnRpZXNbbmFtZV0gfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoZWxlbWVudCA9PiBpc1N0cmluZyhlbGVtZW50LnZhbHVlKSAmJiBlbGVtZW50LnZhbHVlLmxlbmd0aCA+IDApXG4gICAgLm1hcChlbGVtZW50ID0+IHtcbiAgICAgIGxldCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemUoZWxlbWVudC52YWx1ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlbGVtZW50Lm5hbWUgPT09ICdzaG9ydE5hbWUnICYmXG4gICAgICAgICAgdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKG5vcm1hbGl6ZWRWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNob3J0TmFtZSBpcyBvZiBhIGNlcnRhaW4gZm9ybWF0IChlLmcuIDg5QSksIGl0IGlzIHRyZWF0ZWQgaGVyZVxuICAgICAgICAgIC8vIGFzIGlmIGl0IGhhZCB0aGUgbGVuZ3RoIG9mIHRoZSBudW1iZXJzIHdpdGggdGhlIGxldHRlcnMgcmVtb3ZlZC5cbiAgICAgICAgICAvLyBTbyB0aGUgbGVuZ3RoIG9mIDg5QSB3b3VsZCBiZSB0cmVhdGVkIGFzIDIuXG4gICAgICAgICAgW25vcm1hbGl6ZWRWYWx1ZV0gPSBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZ1bGwgbWF0Y2ggYXQgc3RhcnQuIFJldHVybiBtYXggcmVzdWx0IHdoZW4gbWF0Y2ggaXMgZnVsbCwgbm90IG9ubHkgcGFydGlhbFxuICAgICAgICByZXR1cm4gMC41ICsgbm9ybWFsaXplZFRlcm0ubGVuZ3RoIC8gbm9ybWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIGJlY2F1c2Ugb2YgZmlsdGVybWF0Y2hpbmd0b2lucHV0LCB3ZSBrbm93IHRoYXQgbWF0Y2ggb2NjdXJyZWQgc29tZXdoZXJlXG4gICAgICAvLyBkb24ndCBydW4gZmlsdGVybWF0Y2hpbmcgYWdhaW4gYnV0IGVzdGltYXRlIHJvdWdobHk6XG4gICAgICAvLyB0aGUgbG9uZ2VyIHRoZSBtYXRjaGluZyBzdHJpbmcsIHRoZSBiZXR0ZXIgY29uZmlkZW5jZSwgbWF4IGJlaW5nIDAuNVxuICAgICAgcmV0dXJuICgwLjUgKiBub3JtYWxpemVkVGVybS5sZW5ndGgpIC8gKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCArIDEpO1xuICAgIH0pXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT4gKGN1cnJlbnQgPiBwcmV2aW91cyA/IGN1cnJlbnQgOiBwcmV2aW91cyksXG4gICAgICAwLFxuICAgICk7XG59O1xuXG4vKipcbiAqIFJhbmtzIHRoZSByZXN1bHQgYmFzZWQgb24gaXRzIGxheWVyIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHRoZSBzb3VyY2UgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYXllclJhbmsgPSAobGF5ZXIsIHNvdXJjZSkgPT4ge1xuICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgY2FzZSBMYXllclR5cGUuQ3VycmVudFBvc2l0aW9uOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBMYXllclR5cGUuQmFjazpcbiAgICAgIHJldHVybiAwLjk7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU1hcDpcbiAgICAgIHJldHVybiAwLjg7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU93bkxvY2F0aW9uczpcbiAgICAgIHJldHVybiAwLjc5O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0YXRpb246XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUGxhY2U6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RvcDpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVSb3V0ZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjQ1O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZ1dHVyZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDQ7XG4gICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgaWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMC40MztcbiAgICAgIH1cbiAgICAgIHJldHVybiAwLjQyO1xuICAgIH1cbiAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICByZXR1cm4gMC4zNjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gdmVudWUsIGFkZHJlc3MsIHN0cmVldCwgcm91dGUteHh4XG4gICAgICByZXR1cm4gMC40MTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgcmVzdWx0cy4gT3JkZXJzIGFzIGZvbGxvd3M6XG4gKiAgLSBjdXJyZW50IHBvc2l0aW9uIGZpcnN0IGZvciBhbiBlbXB0eSBzZWFyY2hcbiAqICAtIG1hdGNoaW5nIHJvdXRlcyBmaXJzdFxuICogIC0gb3RoZXJ3aXNlIGJ5IGNvbmZpZGVuY2UsIGV4Y2VwdCB0aGF0OlxuICogICAgLSBib29zdCB3ZWxsIG1hdGNoaW5nIHN0YXRpb25zIChlc3BlY2lhbGx5IGZyb20gR1RGUylcbiAqICAgIC0gcmFuayBzdG9wcyBsb3dlciBhcyB0aGV5IHRlbmQgdG8gb2NjdXB5IG1vc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzXG4gKiAgLSBpdGVtcyB3aXRoIG5vIGNvbmZpZGVuY2UgKG9sZCBzZWFyY2hlcyBhbmQgZmF2b3JpdGVzKTpcbiAqICAgIC0gcmFuayBmYXZvdXJpdGVzIGJldHRlciB0aGFuIG9yZGluYXJ5IG9sZCBzZWFyY2hlc1xuICogICAgLSByYW5rIGZ1bGwgbWF0Y2ggYmV0dGVyIHRoYW4gcGFydGlhbCBtYXRjaFxuICogICAgLSByYW5rIG1hdGNoIGF0IG1pZGRsZSB3b3JkIGxvd2VyIHRoYW4gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZ1xuICogICAgLSByYW5rIGJpa2UgcmVudGFsIHN0YXRpb25zIGxvd2VyXG4gKiBAcGFyYW0geypbXX0gcmVzdWx0cyBUaGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZXJlIHJlY2VpdmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gdGVybSBUaGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZFxuICovXG5leHBvcnQgY29uc3Qgc29ydFNlYXJjaFJlc3VsdHMgPSAobGluZVJlZ2V4cCwgcmVzdWx0cywgdGVybSA9ICcnKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSB8fCAhcmVzdWx0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cy5maWx0ZXIociA9PiByKSxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldExheWVyUmFuayhsYXllciwgc291cmNlKSArXG4gICAgICAgICAgICBtYXRjaChub3JtYWxpemVkVGVybSwgcmVzdWx0LnByb3BlcnRpZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhcbiAgICAgICAgICAgIHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSxcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSlbMF1cbiAgICAgICAgICAgIDogcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMoXG4gICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpWzFdXG4gICAgICAgICAgICA6IHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICAgICdwcm9wZXJ0aWVzLmxvbmdOYW1lJyxcbiAgICBdLFxuICAgIFsnZGVzYycsICdkZXNjJywgJ2FzYycsICdhc2MnLCAnYXNjJ10sXG4gICk7XG5cbiAgcmV0dXJuIHVuaXFXaXRoKG9yZGVyZWRSZXN1bHRzLCBpc0R1cGxpY2F0ZSk7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBzdG9wJ3MgbmFtZSB3aXRob3V0IHN0b3AgY29kZSBmcm9tIGEgc3RvcCBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgc3RvcCdzIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9wQ29kZSBzdG9wIGNvZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdG9wTmFtZSA9IChuYW1lLCBzdG9wQ29kZSkgPT4ge1xuICBpZiAoXG4gICAgc3RvcENvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN0b3BDb2RlICE9PSBudWxsICYmXG4gICAgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgIT09IC0xXG4gICkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAtIDEpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufTtcbiIsImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGxpc3QgbWF0Y2hpbmcgdG8gaW5wdXQuXG4gKlxuICogQG5hbWUgZmlsdGVyTWF0Y2hpbmdUb0lucHV0XG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IExpc3QgY29udGFpbmluIG9iamVjdHMgZS5nKCAge1xuICogICAgICAgICB0eXBlOiAnRmVhdHVyZSdcbiAqICAgICAgICAgcHJvcGVydGllczoge1xuICogICAgICAgICAgIGxhYmVsOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgICBsYXllcjogJ2FkZHJlc3MnLFxuICogICAgICAgICAgIG5hbWU6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICB9LFxuICogICAgICAgICBnZW9tZXRyeTogeyBjb29yZGluYXRlczogW2xvbiwgbGF0XSB9LFxuICogICAgICAgfSwpXG4gKiBAcGFyYW0ge1N0cmluZ30gSW5wdXQgSW5wdXQgZ2l2ZW4gZm9yIGZpbHRlcmluZyB0aGUgbGlzdFxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIExpc3Qgb2YgZmllbGRzIHRoYXQgbGlzdCBpcyBmaWx0ZXJlZCBieSBlLmcgKFtwcm9wZXJ0aWVzLmxhYmVsLCBwcm9wZXJ0aWVzLm5hbWVdKVxuICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBBcnJheS5cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmZpbHRlck1hdGNoaW5nVG9JbnB1dChbe3R5cGU6IGZlYXR1cmUsIHByb3BlcnRpZXMgeyAuLi4gbmFtZTogdGVzdGFkZHJlc3M0IH0gLi4uIH1dLCAndGVzdGFkZHJlc3M0JywgJ3Byb3BlcnRpZXMubmFtZScpO1xuICogLy89IExpc3QgY29udGFpbmluZyBvYmplY3Qgd2l0aCBnaXZlbiBuYW1lLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQobGlzdCwgSW5wdXQsIGZpZWxkcykge1xuICBpZiAodHlwZW9mIElucHV0ID09PSAnc3RyaW5nJyAmJiBJbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5wdXQgPSBJbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aVdvcmQgPSBpbnB1dC5pbmNsdWRlcygnICcpIHx8IGlucHV0LmluY2x1ZGVzKCcsJyk7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgbGV0IHBhcnRzID0gW107XG4gICAgICBmaWVsZHMuZm9yRWFjaChwTmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldChpdGVtLCBwTmFtZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFtdWx0aVdvcmQgJiZcbiAgICAgICAgICAocE5hbWUgPT09ICdwcm9wZXJ0aWVzLmxhYmVsJyB8fCBwTmFtZSA9PT0gJ2FkZHJlc3MnKSAmJlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogZHJvcCBsYXN0IHBhcnRzIGkuZS4gY2l0eSBhbmQgbmVpZ2hib3VyaG9vZFxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobXVsdGlXb3JkKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKGlucHV0KSA9PT0gMCkge1xuICAgICAgICAgIC8vIGFjY2VwdCBtYXRjaCBvbmx5IGF0IHdvcmQgc3RhcnRcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5jb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJykuZGVmYXVsdDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIHJlZHUoXG4gICAgbWFwLFxuICAgIHN0b3BPclN0YXRpb24sXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucykge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzU3RhdGlvbnMgPT4ge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzdG9wc1N0YXRpb25zLmZpbHRlcihzID0+XG4gICAgICBzLnR5cGUgPT09ICdzdG9wJyA/IHVzZVN0b3BzIDogdXNlU3RhdGlvbnMsXG4gICAgKTtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGNhbmRpZGF0ZXMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuICAncm91dGUtRlVOSUNVTEFSJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbmNvbnN0IHN0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7IC8vIHNlYXJjaCBzdGF0aW9ucyBmcm9tIE9TTVxuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb2NvZGluZ1NvdXJjZXMuam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnByb3BlcnRpZXMuZ2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydGllcy5naWQuaW5jbHVkZXMoJ0dURlM6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICghdXNlU3RvcHMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZVN0YXRpb25zKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSkgOiByZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWy4uLnN0b3BMYXllcnNdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzc2UnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdGw7xnZSBad2lzY2hlbnppZWwgaGluenUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0ZsdWcnLFxuICAgICAgYXJyaXZhbDogJ0Fua3VuZnQnLFxuICAgICAgYmFjazogJ1p1csO8Y2snLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdMZWlocmFkLVN0YXRpb24nLFxuICAgICAgYnVzOiAnQnVzJyxcbiAgICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0zDtnNjaGVuJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdTdWNoaGlzdG9yaWUgbMO2c2NoZW4nLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1dvbGxlbiBTaWUgZGllIFN1Y2gtSGlzdG9yaWUgbMO2c2NoZW4/JyxcbiAgICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgICAgZGVzdGluYXRpb246ICdaaWVsJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdTdGFydCBlaW5nZWJlbi4nLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICAgIGZlcnJ5OiAnRsOkaHJlJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgICBsb2FkaW5nOiAnTGFkZW4uLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcmFpbDogJ1p1ZycsXG4gICAgICBzZWFyY2g6ICdTdWNoZScsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3VjaGUgYW5oYW5kIHZvbiBBZHJlc3NlIG9kZXIgT3J0c2FuZ2FiZScsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnWmllbG9ydCBlaW5nZWJlbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdLZWluIE9ydCBnZWZ1bmRlbi4nLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTdGFuZG9ydCBlcm1pdHRlbG4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdBa3R1ZWxsZSBBdXN3YWhsOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1N0cmHDn2UnLFxuICAgICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdIYWx0ZXN0ZWxsZScsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3VjaGUgTGVpaHJhZC1TdGF0aW9uZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTdWNoZSBTdGFkdGJhaG4tSGFsdGVzdGVsbGVuLVN1Y2hlJyxcbiAgICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICAgIHRyYW06ICdTdHJhw59lbmJhaG4nLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ0F1cyBlaWdlbmVuIEZhdm9yaXRlbiBhdXN3w6RobGVuJyxcbiAgICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgICAgd2hlcmU6ICdXb2hpbj8nLFxuICAgICAgcGxhY2U6ICdPcnQnLFxuICAgIH0sXG4gIH0sXG4gIGVuOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkZHJlc3MsIHBsYWNlIG9yIGJ1c2luZXNzJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdBZGQgdmlhIHBvaW50JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdGbGlnaHQnLFxuICAgICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgICAgYmFjazogJ0JhY2snLFxuICAgICAgYmlrZXBhcms6ICdQYXJrICYgUmlkZSBmb3IgYmlrZXMnLFxuICAgICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgICAgYnVzOiAnYnVzJyxcbiAgICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdDbGVhcicsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnQ2xlYXIgc2VhcmNoIGhpc3RvcnknLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZWFyY2ggaGlzdG9yeT8nLFxuICAgICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ0VudGVyIHlvdXIgb3JpZ2luLicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm91cml0ZScsXG4gICAgICBmZXJyeTogJ0ZlcnJ5JyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbScsXG4gICAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICAgIHJhaWw6ICdUcmFpbicsXG4gICAgICByZXF1aXJlZDogJ3JlcXVpcmVkIGZpZWxkJyxcbiAgICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU2VhcmNoIGJ5IGFkZHJlc3Mgb3IgcGxhY2UgbmFtZScsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTZWFyY2gnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU2VhcmNoIG9yaWdpbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdTdHJlZXQnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgICAgc3RvcDogJ1N0b3AnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU2VhcmNoIHN0b3BzIGFuZCByb3V0ZXMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYmlrZXBhcmsnOiAnU2VhcmNoIGJpa2UgcGFya3MnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1NlYXJjaCBidXMgcm91dGVzIG9yIHN0b3BzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnU2VhcmNoIGNhciBwYXJrcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU2VhcmNoIHRyYWluIHJvdXRlcyBvciBzdGF0aW9ucycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXMgYW5kIHN0b3Agc2VhcmNoJyxcbiAgICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgICAgdHJhbTogJ1RyYW0nLFxuICAgICAgdHJhY2s6ICdUcmFjaycsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1NlbGVjdCBwb3NpdGlvbiBmcm9tIG1hcCcsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcG9pbnQnLFxuICAgICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdPc29pdGUsIHBhaWtrYSB0YWkgeXJpdHlzJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgICAgYXJyaXZhbDogJ1BlcmlsbMOkJyxcbiAgICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgICB2ZWhpY2xlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgICBiaWtlcGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgICBidXM6ICdidXNzaScsXG4gICAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGvDtmludGknLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnVMOkbcOkbmhldGtpbmVuIHNpamFpbnRpJyxcbiAgICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnTMOkaHTDtmFpa2EnLFxuICAgICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgICBmZXJyeTogJ0xhdXR0YScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgICBvd25sb2NhdGlvbnM6ICdPbWF0IHBhaWthdCcsXG4gICAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcGxhdGZvcm06ICdMYWl0dXJpJyxcbiAgICAgIHJhaWw6ICdKdW5hJyxcbiAgICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICAgIHNlYXJjaDogJ0V0c2knLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ0hhZSBtw6TDpHLDpG5ww6TDpHTDpCwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdLYXRzbyB0dWxva3NldCB2aWVyZWlzZWx0w6QgTcOkw6Ryw6RucMOkw6QtdsOkbGlsZWhkZWx0w6QnLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N5w7Z0w6QgbMOkaHTDtnBhaWtrYScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnb2kgbGlzdGFzc2EgbnVvbGluw6RwcMOkaW1pbGzDpCBqYSB2YWxpdHNlIGVudGVyaWxsw6QuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdTecO2dMOkIHNpamFpbnRpIGphIG5hdmlnb2kgbGlzdGFzc2EgcHl5aGvDpGlzZW3DpGxsw6QuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXN0YScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICAgIHN0cmVldDogJ0thdHUnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICAgIHN0b3A6ICdQeXPDpGtraScsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdIYWUgcHnDtnLDpHBhcmtraWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ0hhZSBidXNzaWxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jYXJwYXJrJzogJ0hhZSBhdXRvcGFya2tpYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdIYWUga2F1cHVua2lwecO2csOkYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnSGFlIG1ldHJvbGluamFhIHRhaSBhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdIYWUgcmFpdGlvbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgICAndG9kYXktYXQnOiAndMOkbsOkw6RuIGtsbycsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnaHVvbWVubmEga2xvJyxcbiAgICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVmFsaXRzZSBvbWlzdGEgcGFpa29pc3RhJyxcbiAgICAgIHZlbnVlOiAnUGFpa2thJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgICB3aGVyZTogJ01pbm5lIG1lbm7DpMOkbj8nLFxuICAgICAgcGxhY2U6ICdQYWlra2EnLFxuICAgIH0sXG4gIH0sXG4gIHBsOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZHJlcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlcywgbWllanNjZSBsdWIgZmlybWEnLFxuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0RvZGFqIHB1bmt0IHBvxZtyZWRuaScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1phbWtuaWogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ090d8Ozcnogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnTG90JyxcbiAgICAgIGFycml2YWw6ICdQcnp5amF6ZCcsXG4gICAgICBiYWNrOiAnV3LDs8SHJyxcbiAgICAgIGJpa2VwYXJrOiAnUGFya3VqIGkgSmVkxbogZGxhIHJvd2Vyw7N3JyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhY2phIHJvd2Vyb3dhJyxcbiAgICAgIGJ1czogJ2F1dG9idXMnLFxuICAgICAgY2FuY2VsOiAnQW51bHVqJyxcbiAgICAgIGNhcnBhcms6ICdQYXJrdWogaSBKZWTFuicsXG4gICAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1d5Y3p5xZvEhycsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnV3ljennFm8SHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWEnLFxuICAgICAgY3VycmVudHBvc2l0aW9uOiAnT2JlY25lIHBvxYJvxbxlbmllJyxcbiAgICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6XG4gICAgICAgICdDenkgbmEgcGV3bm8gY2hjZXN6IHd5Y3p5xZtjacSHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWE/JyxcbiAgICAgIGRlcGFydHVyZTogJ09kamF6ZCcsXG4gICAgICBkZXN0aW5hdGlvbjogJ0NlbCcsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnV3Byb3dhZMW6IHN3w7NqIHB1bmt0IHBvY3rEhXRrb3d5LicsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdXcHJvd2Fkxbogc3fDs2ogY2VsJyxcbiAgICAgIGZhdm91cml0ZTogJ1VsdWJpb25lJyxcbiAgICAgIGZlcnJ5OiAnUHJvbScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1ByenlzesWCYSB0cmFzYScsXG4gICAgICBvcmlnaW46ICdQb2N6xIV0ZWsnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1BvY3rEhXRlaycsXG4gICAgICBvd25sb2NhdGlvbnM6ICdXxYJhc25lIG1pZWpzY2EnLFxuICAgICAgbG9hZGluZzogJ8WBYWRvd2FuaWXigKYnLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICAgIHBsYXRmb3JtOiAnUGVyb24nLFxuICAgICAgcmFpbDogJ1BvY2nEhWcnLFxuICAgICAgcmVxdWlyZWQ6ICd3eW1hZ2FuZSBwb2xlJyxcbiAgICAgIHNlYXJjaDogJ1N6dWthaicsXG4gICAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3p1a2FqIHBvIGFkcmVzaWUgbHViIG5hendpZSBtaWVqc2NhJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N6dWthaicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N6dWthaiBjZWx1LCB0cmFzeSBsdWIgcHJ6eXN0YW5rdScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1dwcm93YWTFuiBwdW5rdCBkb2NlbG93eScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdXecWbd2lldGwgd3luaWtpIHcgc8SFc2llZG5pZWoga2FyY2llIOKAnkNlbOKAnScsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnQnJhayBsb2thbGl6YWNqaScsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdXeXN6dWthaiBwb2N6xIV0ZWssIGtvbmllYyBsdWIgcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1dwcm93YWTFuiBwdW5rdCBwb2N6xIV0a293eScsXG4gICAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1d5a3J5aiBsb2thbGl6YWNqxJknLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdNaWVqc2NlLCBsb2thbGl6YWNqYSBpIHByenlzdGFuZWsuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF3aWd1aiBwbyBsacWbY2llIHXFvHl3YWrEhWMgc3RyemHFgmVrIGkgd3liaWVyYWoga2xhd2lzemVtIEVudGVyLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnV3Byb3dhZMW6IGxva2FsaXphY2rEmSBpIG5hd2lndWogcG8gbGnFm2NpZSBnZXN0YW1pIHByemVzdXdhbmlhLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnUG8gd3licmFuaXUgbG9rYWxpemFjamkgcG9jesSFdGtvd2VqLCBhdXRvbWF0eWN6bmllIHByemVqZHppZXN6IGRvIHBvbGEgbWllanNjYSBkb2NlbG93ZWdvLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdEb3N0xJlwbmEgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqYScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9mZXcnOiAnRG9zdMSZcG5lIHPEhSB7e2NvdW50fX0gcHJvcG96eWNqZScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9vdGhlcic6ICdEb3N0xJlwbmUgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqaScsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdPYmVjbnkgd3liw7NyOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ1VsaWNhJyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdTdGFjamEnLFxuICAgICAgc3RvcDogJ1ByenlzdGFuZWsnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU3p1a2FqIHByenlzdGFua8OzdyBpIHRyYXMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU3p1a2FqIGxvdMOzdyBpIGxvdG5pc2snLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N6dWthaiB0cmFzIGF1dG9idXNvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTenVrYWogc3RhY2ppIHJvd2Vyw7N3IG1pZWpza2ljaCcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N6dWthaiB0cmFzIGtvbGVqb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N6dWthaiB0cmFzIG1ldHJhIGkgcHJ6eXN0YW5rw7N3ICcsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N6dWthaiB0cmFzIHRyYW13YWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ1d5c3p1a2l3YW5pZSBhdXRvYnVzw7N3IGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICd0b2RheS1hdCc6ICdkemnFmyBvJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdqdXRybyBvJyxcbiAgICAgIHRyYW06ICdUcmFtd2FqJyxcbiAgICAgIHRyYWNrOiAnVG9yJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1XFvHlqIG9iZWNuZWogbG9rYWxpemFjamknLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXeWJpZXJ6IG1pZWpzY2UgbmEgbWFwaWUnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnV3liaWVyeiB6IHfFgmFzbnljaCBtaWVqc2MnLFxuICAgICAgdmVudWU6ICdNaWVqc2NlJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnUHJ6ZXogcHVua3QnLFxuICAgICAgd2hlcmU6ICdEb2vEhWQ/JyxcbiAgICAgIHBsYWNlOiAnTWllanNjZScsXG4gICAgfSxcbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIHBsYXRzIGVsbGVyIGbDtnJldGFnJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICAgIGFycml2YWw6ICdBbmzDpG5kZXInLFxuICAgICAgYmFjazogJ1RpbGxiYWthJyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgICBidXM6ICdCdXNzaScsXG4gICAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgICAgY2FycGFyazogJ0luZmFydHNwYXJrZXJpbmcnLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUw7ZtJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ051dmFyYW5kZSBwb3NpdGlvbicsXG4gICAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgICAgZGVwYXJ0dXJlOiAnQXZnw6VuZ3N0aWQnLFxuICAgICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICAgIGZlcnJ5OiAnRsOkcmphJyxcbiAgICAgICdmdXR1cmUtcm91dGUnOiAnRnJhbXRpZGEgcnV0dCcsXG4gICAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ1Nrcml2IGluIGRpbiBhdmbDpHJkc3BsYXRzJyxcbiAgICAgIG9yaWdpbjogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICAgb3dubG9jYXRpb25zOiAnRWduYSBwbGF0c2VyJyxcbiAgICAgIGxvYWRpbmc6ICdMYWRkYXIuLi4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgcGxhdGZvcm06ICdQbGF0dGZvcm0nLFxuICAgICAgcmFpbDogJ1TDpWcnLFxuICAgICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICAgIHNlYXJjaDogJ1PDtmsnLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1PDtmsgbWVkIGFkcmVzc2VuIGVsbGVyIHBsYXRzZW5zIG5hbW4nLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1PDtmsgZGVzdGluYXRpb24sIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTa3JpdiBkZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAgICdTZSByZXN1bHRhdGVuIHVuZGVyIGZsaWtlbiBEZXN0aW5hdGlvbicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnSW5nYSBzw7ZrcmVzdWx0YXQnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1Nrcml2IGF2ZsOkcmRzcGxhdHMnLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTw7ZrIHBvc2l0aW9uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgICAnTmF2aWdlcmEgbGlzdGFuIG1lZCBwaWx0YW5nZW50ZXJuYSBvY2ggdsOkbGogbWVkIEVudGVyLXRhbmdldGVuLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnQW5nZSBwbGF0c2VuIG9jaCBuYXZpZ2VyYSBpIGxpc3RhbiBnZW5vbSBhdHQgc3ZlcGEuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0hpdHRhZGUge3tjb3VudH19IGbDtnJzbGFnJyxcbiAgICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ051dmFyYW5kZSB2YWw6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnR2F0YScsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgICAnc3RvcC1uZWFyLXlvdSc6ICdTw7ZrIGjDpWxscGxhdHNlciBlbGxlciBsaW5qZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU8O2ayBmbHlnIGVsbGVyIGZseWdwbGF0c2VyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJpa2VwYXJrJzogJ1PDtmsgY3lrZWxwYXJrZXJpbmcnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1PDtmsgYnVzc2xpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2FycGFyayc6ICdTw7ZrIGFuc2x1dG5pbmdzcGFya2VyaW5nJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1PDtmsgc3RhZHNjeWtlbHN0YXRpb25lcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1PDtmsgbsOkcnTDpWdlciBlbGxlciBzdGF0aW9uZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU8O2ayBzcMOlcnZhZ25saW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzcyBvY2ggc3RvcHAgc8O2a25pbmdlbicsXG4gICAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2kgbW9yZ29uJyxcbiAgICAgIHRyYW06ICdTcMOlcnZhZ24nLFxuICAgICAgdHJhY2s6ICdTcMOlcicsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1bDpGxqIHBvc2l0aW9uIGZyw6VuIGthcnRhbicsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgICAgdmVudWU6ICdNw7Z0ZXNwbGF0cycsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgICBwbGFjZTogJ1BsYXRzJyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGFkbWluIChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsYWRtaW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxhZG1pbiA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlc3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBpZiAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllclxuICAgICk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtcbiAgZ2V0TmFtZUxhYmVsLFxuICBnZXRTdG9wQ29kZSxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IHsgZ2V0U3RvcE5hbWUgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZ2V0TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IGNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQT0lTZWFyY2ggPSBpZCA9PlxuICBpZCA9PT0gJ29yaWdpbicgfHxcbiAgaWQgPT09ICdkZXN0aW5hdGlvbicgfHxcbiAgaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gIGlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG5leHBvcnQgY29uc3QgZ2V0UGxhdGZvcm0gPSAoYWRkZW5kdW0sIGxuZywgdCkgPT4ge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFhZGRlbmR1bSB8fCAhYWRkZW5kdW0uR1RGUy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgeyBtb2RlcywgcGxhdGZvcm0gfSA9IGFkZGVuZHVtLkdURlM7XG4gIGNvbnN0IHR5cGUgPVxuICAgIG1vZGVzICYmIG1vZGVzWzBdID09PSAnUkFJTCcgPyB0KCd0cmFjaycsIHsgbG5nIH0pIDogdCgncGxhdGZvcm0nLCB7IGxuZyB9KTtcbiAgcmV0dXJuIFt0eXBlLCBwbGF0Zm9ybV07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSwgbG5nLCB0KSB7XG4gIC8vIGNoZWNrIGlmIGk4MW4gaXMgaW5pdGlhbGl6ZWRcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXRlbS50eXBlICE9PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCdzZWxlY3QtZnJvbS1tYXAnLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCd1c2Utb3duLXBvc2l0aW9uJywgeyBsbmcgfSldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgIHJldHVybiBbJycsIHQoJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLCB7IGxuZyB9KV07XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgICBsZXQgW25hbWUsIGxhYmVsXSA9IGdldE5hbWVMYWJlbChpdGVtLnByb3BlcnRpZXMsIHRydWUpO1xuICAgIGxldCBzdWdnZXN0aW9uVHlwZTtcbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXJlbnRhbCcpIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXN0YXRpb24nKVxuICAgICkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KCd2ZWhpY2xlcmVudGFsc3RhdGlvbicsIHsgbG5nIH0pO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgnYmlrZXBhcmsnLCB7IGxuZyB9KTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnY2FycGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgnY2FycGFyaycsIHsgbG5nIH0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubW9kZSkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSB0KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICAgeyBsbmcgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdChsYXllciwgeyBsbmcgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmlkICYmXG4gICAgICAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RvcCcgfHwgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGdldFN0b3BDb2RlKGl0ZW0ucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBtb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtPy5HVEZTLm1vZGVzO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0sIGxuZywgdCk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSwgbG5nKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIHN0b05hbWUsIGxhYmVsLCBjb2RlLCB1bmRlZmluZWQsIHBsYXRmb3JtXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgbGFiZWxdO1xuICB9XG4gIGNvbnN0IHsgb3JpZ2luLCBkZXN0aW5hdGlvbiB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICBjb25zdCB0YWlsMSA9IG9yaWdpbi5sb2NhbGl0eSA/IGAsICR7b3JpZ2luLmxvY2FsaXR5fSBmb29iYXJgIDogJyc7XG4gIGNvbnN0IHRhaWwyID0gZGVzdGluYXRpb24ubG9jYWxpdHkgPyBgLCAke2Rlc3RpbmF0aW9uLmxvY2FsaXR5fWAgOiAnJztcbiAgY29uc3QgbmFtZTEgPSBvcmlnaW4ubmFtZTtcbiAgY29uc3QgbmFtZTIgPSBkZXN0aW5hdGlvbi5uYW1lO1xuICByZXR1cm4gW1xuICAgIHQoJ2Z1dHVyZS1yb3V0ZScsIHsgbG5nIH0pLFxuICAgIGAke3QoJ29yaWdpbicsIHsgbG5nIH0pfSAke25hbWUxfSR7dGFpbDF9ICR7dCgnZGVzdGluYXRpb24nLCB7XG4gICAgICBsbmcsXG4gICAgfSl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0sIGxuZywgdCkge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdGltZSA9IERhdGVUaW1lLmZyb21TZWNvbmRzKE51bWJlcihpdGVtLnByb3BlcnRpZXMudGltZSkpO1xuICBjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gdCgnYXJyaXZhbCcsIHsgbG5nIH0pXG4gICAgOiB0KCdkZXBhcnR1cmUnLCB7IGxuZyB9KTtcbiAgaWYgKHRpbWUuaGFzU2FtZShub3csICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5oYXNTYW1lKG5vdy5wbHVzKHsgZGF5czogMSB9KSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3QoJ3RvbW9ycm93LWF0JywgeyBsbmcgfSl9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dGltZS50b0Zvcm1hdCgnY2NjIGQuTC4nKX1gO1xuICB9XG4gIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdISDptbScpfWA7XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRTdWdnZXN0aW9uVmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgaWYgKFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBnZXRMYWJlbChzdWdnZXN0aW9uLnByb3BlcnRpZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KSA9PiB7XG4gIGxldCBsYWJlbCA9IFtdO1xuICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uc1swXTtcbiAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGxhYmVsLnB1c2godCgnZmF2b3VyaXRlJywgeyBsbmcgfSkpO1xuICAgIH1cbiAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudChzdWdnZXN0aW9uc1swXSwgbG5nKSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG59O1xuIiwiaW1wb3J0IHsgZ2V0TmFtZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0aWVzXG4gKlxuICogQG5hbWUgZ2V0TGFiZWxcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsdT1cIlwiLGk9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTt1Kz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PWk/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIrdX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0saT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciB1PW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh1KX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksaD1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLG09aHx8IW8udGFnTmFtZT9udWxsOm87aWYoaHx8bSl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgYixnLHcsRT11KGQpLE89aD9vOmZ1bmN0aW9uKHQsbixvLHUpe3ZhciBpPTA7aWYodC5vZmZzZXRQYXJlbnQpZG97aSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gaT1NYXRoLm1heChpLW4tbywwKSx1JiYoaT1NYXRoLm1pbihpLHIoKS1lLmlubmVySGVpZ2h0KSksaX0obSxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2J8fChiPXQpLEkrPXQtYix3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixnPShnPTA9PT1NPzA6SS9NKT4xPzE6ZyksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksaShvLG4saCkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksYj1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksYj10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLGgsZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz9pKG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LGg9ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0sbT1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDQzMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig0NyksdCkscihuKDkyNiksdCkscihuKDM0OSksdCkscihuKDEzNyksdCkscihuKDcyOSksdCkscihuKDM4MyksdCkscihuKDQ1MCksdCkscihuKDM1OCksdCkscihuKDc1MyksdCkscihuKDg2OSksdCkscihuKDM1MiksdCkscihuKDQ0NiksdCkscihuKDE2NCksdCkscihuKDMwNSksdCkscihuKDUwMiksdCl9LDM0OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksdT1yWzBdLGk9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtpKGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHModT4wP3UtMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHU8dC5sZW5ndGgtMT9zKHUrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDp1fX19LDQ0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDE2NDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSwxMzc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0sdT1uWzFdLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTt1KHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihpLGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fXUoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw3Mjk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDQzMiksdT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3VbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLGk9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLGk+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDUwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHx1KHQpfSksW2UsdF0pLGUmJnJ9fSwzMDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oNzI5KTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDM4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNzUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSw1MDI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSwzNTI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDg2OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSdW5BZnRlclVwZGF0ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlUnVuQWZ0ZXJVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19LHQuZGVmYXVsdD10LnVzZVJ1bkFmdGVyVXBkYXRlfSw5MjY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sMzU4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLHU9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsaT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IHUuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiBpfSx1cGRhdGVVUkw6ITF9KX0pLFtpLG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxvKSx1LmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oNDMyKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7XG4gIGlmIChudWxsID09IGUpIHJldHVybiB7fTtcbiAgdmFyIG8sXG4gICAgcixcbiAgICBpID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTtcbiAgfVxuICByZXR1cm4gaTtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IFN1Z2dlc3Rpb25JdGVtIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LXN1Z2dlc3Rpb24taXRlbSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge1xuICBnZXRTdWdnZXN0aW9uQ29udGVudCxcbiAgdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSxcbn0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5mdW5jdGlvbiBTdWdnZXN0aW9uKHtcbiAgaXRlbSxcbiAgbG5nLFxuICBnZXRJdGVtUHJvcHMsXG4gIGhpZ2hsaWdodGVkSW5kZXgsXG4gIGl0ZW1JbmRleCxcbiAgc3R5bGVzLFxuICAuLi5yZXN0XG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5ld0l0ZW0gPVxuICAgIGl0ZW0udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICB0cmFuc2xhdGVkVGV4dDogdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtLCBsbmcsIHQpLFxuICAgICAgICB9XG4gICAgICA6IGl0ZW07XG4gIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtLCBsbmcsIHQpO1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgc3R5bGVzLnN1Z2dlc3Rpb24sXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXggPT09IGl0ZW1JbmRleCAmJiBzdHlsZXMuc3VnZ2VzdGlvbkhpZ2hsaWdodGVkLFxuICAgICAgKX1cbiAgICAgIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogaXRlbUluZGV4IH0pfVxuICAgID5cbiAgICAgIDxTdWdnZXN0aW9uSXRlbSBpdGVtPXtuZXdJdGVtfSBjb250ZW50PXtjb250ZW50fSBsbmc9e2xuZ30gey4uLnJlc3R9IC8+XG4gICAgPC9saT5cbiAgKTtcbn1cbmNvbnN0IGl0ZW1TaGFwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdGVkSWNvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRyYW5zbGF0ZWRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwcm9wZXJ0aWVzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxheWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2FsYWRtaW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYXJyb3dDbGlja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkZXN0aW5hdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICB9KSxcbn0pO1xuXG5TdWdnZXN0aW9uLnByb3BUeXBlcyA9IHtcbiAgaXRlbTogaXRlbVNoYXBlLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGhpZ2hsaWdodGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgaXRlbUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gU3VnZ2VzdGlvbnMoe1xuICBzdWdnZXN0aW9ucyxcbiAgZ2V0TWVudVByb3BzLFxuICBnZXRJdGVtUHJvcHMsXG4gIGxuZyxcbiAgc3R5bGVzLFxuICBoaWRkZW4sXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbixcbiAgaGFuZGxlQ2xlYXJIaXN0b3J5LFxuICAuLi5yZXN0XG59KSB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4sXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lcixcbiAgICAgICAgaGlkZGVuICYmICdoaWRkZW4nLFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPHVsIGNsYXNzTmFtZT17c3R5bGVzLnN1Z2dlc3Rpb25zTGlzdH0gey4uLmdldE1lbnVQcm9wcygpfT5cbiAgICAgICAge3N1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U3VnZ2VzdGlvblxuICAgICAgICAgICAgICBrZXk9e2Ake3N1Z2dlc3Rpb24udHlwZX0tJHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMuZ2lkIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMuZ3Rmc0lkXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICBnZXRJdGVtUHJvcHM9e2dldEl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgaXRlbUluZGV4PXtpfVxuICAgICAgICAgICAgICBpdGVtPXtzdWdnZXN0aW9ufVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgICAge3JlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiAmJiAoXG4gICAgICAgICAgPGxpIHsuLi5nZXRJdGVtUHJvcHMoeyBpbmRleDogc3VnZ2VzdGlvbnMubGVuZ3RoIH0pfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJIaXN0b3J5fVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdjbGVhci1zZWFyY2gtaGlzdG9yeScsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cblN1Z2dlc3Rpb25zLnByb3BUeXBlcyA9IHtcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKGl0ZW1TaGFwZSkuaXNSZXF1aXJlZCxcbiAgZ2V0TWVudVByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRJdGVtUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBoaWRkZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5TdWdnZXN0aW9ucy5kZWZhdWx0UHJvcHMgPSB7XG4gIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbjogZmFsc2UsXG4gIGhhbmRsZUNsZWFySGlzdG9yeTogKCkgPT4gdW5kZWZpbmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIElucHV0IGNsZWFyIGJ1dHRvbiBlbGVtZW50XG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGVhckJ1dHRvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29sb3IgLy8gaGV4IGNvbG9yIHN0cmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGxuZyAvLyBsYW5ndWFnZSwgZWcuICdmaSdcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gY2xlYXJJbnB1dFxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBbb25LZXlEb3duXVxuICogQHBhcmFtIHtDbGVhckJ1dHRvblByb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5leHBvcnQgY29uc3QgQ2xlYXJCdXR0b24gPSAoeyBjb2xvciwgbG5nLCBjbGVhcklucHV0LCBvbktleURvd24sIHN0eWxlcyB9KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICBhcmlhLWxhYmVsPXt0KCdjbGVhci1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgID5cbiAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuQ2xlYXJCdXR0b24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQ2xlYXJCdXR0b24gfSBmcm9tICcuL0NsZWFyQnV0dG9uJztcbmltcG9ydCB7IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIElucHV0KHtcbiAgaWQsXG4gIGxuZyxcbiAgdmFsdWUsXG4gIHBsYWNlaG9sZGVyLFxuICByZXF1aXJlZCxcbiAgZ2V0SW5wdXRQcm9wcyxcbiAgZ2V0TGFiZWxQcm9wcyxcbiAgY2xlYXJJbnB1dCxcbiAgYXJpYUxhYmVsLFxuICBpbnB1dFJlZixcbiAgc3R5bGVzLFxuICByZW5kZXJMYWJlbCxcbiAgaXNNb2JpbGUsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICB0cmFuc3BvcnRNb2RlLFxuICBjbGVhckJ1dHRvbkNvbG9yLFxuICBhdXRvRm9jdXMsXG4gIGlucHV0T25CbHVyLFxufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgIHtyZW5kZXJMYWJlbCAmJiAoXG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIHsuLi5nZXRMYWJlbFByb3BzKHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzWydzci1vbmx5J10sXG4gICAgICAgICAgICBodG1sRm9yOiBpZCxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIHthcmlhTGFiZWx9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICApfVxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLWF1dG9mb2N1c1xuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICBzdHlsZXMuaW5wdXQsXG4gICAgICAgICAgaXNNb2JpbGUgJiYgdHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJycsXG4gICAgICAgICAgc3R5bGVzW2lkXSB8fCAnJyxcbiAgICAgICAgICB2YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnLFxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lLFxuICAgICAgICApfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgey4uLmdldElucHV0UHJvcHMoe1xuICAgICAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiBpbnB1dE9uQmx1cixcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgICAge3ZhbHVlICYmIChcbiAgICAgICAgPENsZWFyQnV0dG9uXG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgY2xlYXJJbnB1dD17KCkgPT4gY2xlYXJJbnB1dChpbnB1dFJlZil9XG4gICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgY29sb3I9e2NsZWFyQnV0dG9uQ29sb3J9XG4gICAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbklucHV0LnByb3BUeXBlcyA9IHtcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBnZXRJbnB1dFByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRMYWJlbFByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICByZW5kZXJMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhckJ1dHRvbkNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0T25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cbklucHV0LmRlZmF1bHRQcm9wcyA9IHtcbiAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgcmVuZGVyTGFiZWw6IGZhbHNlLFxuICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gIGlucHV0T25CbHVyOiAoKSA9PiB7fSxcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IGhvb2tzIGZyb20gJ0Boc2wtZmkvaG9va3MnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IHVzZUNvbWJvYm94IH0gZnJvbSAnZG93bnNoaWZ0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcbmltcG9ydCB7IFN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9TdWdnZXN0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vSW5wdXQnO1xuaW1wb3J0IHtcbiAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50LFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGlzUE9JU2VhcmNoLFxufSBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbi8qKlxuICogQHR5cGVkZWYgQXV0b3N1Z2dlc3RTdGF0ZVxuICogQHByb3BlcnR5IHthcnJheX0gc3VnZ2VzdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVuZGVyTW9iaWxlXG4gKlxuICogQHR5cGVkZWYgTW9iaWxlVmlld1Byb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwRWxlbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhY2Vob2xkZXJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNsZWFySW5wdXRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uU2VsZWN0ZWRJdGVtQ2hhbmdlXG4gKiBAcHJvcGVydHkge29iamVjdH0gZm9udFdlaWdodHNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNsZWFyT2xkU2VhcmNoZXNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBzdWdnZXN0aW9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBjb2xvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsbmdcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBhcmlhUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlucHV0Q2xhc3NOYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcXVpcmVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vYmlsZUxhYmVsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvd1Njcm9sbF1cbiAqIEBwcm9wZXJ0eSB7QXV0b3N1Z2dlc3RTdGF0ZX0gc3RhdGVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGRpc3BhdGNoXG4gKlxuICogQHBhcmFtIHtNb2JpbGVWaWV3UHJvcHN9IHByb3BzXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9XG4gKi9cbmNvbnN0IE1vYmlsZVZpZXcgPSAoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgcGxhY2Vob2xkZXIsXG4gIGNsZWFySW5wdXQsXG4gIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlLFxuICBmb250V2VpZ2h0cyxcbiAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgc3VnZ2VzdGlvblByb3BzLFxuICBsbmcsXG4gIGFyaWFQcm9wcyxcbiAgdmFsdWUsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICByZXF1aXJlZCxcbiAgbW9iaWxlTGFiZWwsXG4gIHNob3dTY3JvbGwsXG4gIHN0YXRlLFxuICBkaXNwYXRjaCxcbiAgY29sb3JzLFxufSkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcbiAgY29uc3QgW2lzRGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBSZWFjdE1vZGFsLnNldEFwcEVsZW1lbnQoYXBwRWxlbWVudCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgIGxvY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5sb2NrKCk7XG4gICAgfVxuICB9LCBbc3RhdGUucmVuZGVyTW9iaWxlXSk7XG5cbiAgLyoqXG4gICAqIGluZGVwZW5kZW50IGhvb2tzIGluIG1vYmlsZSB2aWV3LlxuICAgKiBpbnB1dFZhbHVlIGFuZCBzdWdnZXN0aW9uIHN0YXRlcyBhcmUga2VwdCBpbiB0aGUgcGFyZW50XG4gICAqL1xuICBjb25zdCB7XG4gICAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJbnB1dFByb3BzLFxuICAgIGdldEl0ZW1Qcm9wcyxcbiAgICBzZXRIaWdobGlnaHRlZEluZGV4LFxuICB9ID0gdXNlQ29tYm9ib3goe1xuICAgIGl0ZW1zOiBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICBpbnB1dFZhbHVlOiB2YWx1ZSxcbiAgICBpc09wZW46IHRydWUsXG4gICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U6IGNoYW5nZXMgPT4ge1xuICAgICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2UoY2hhbmdlcyk7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgIH0sXG4gICAgaW5wdXRJZCxcbiAgICBsYWJlbElkLFxuICAgIHNlbGVjdGVkSXRlbTogbnVsbCxcbiAgICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogLTEsXG4gICAgb25JbnB1dFZhbHVlQ2hhbmdlOiAoeyBpbnB1dFZhbHVlIH0pID0+XG4gICAgICBzdGF0ZS5yZW5kZXJNb2JpbGUgJiYgLy8gcHJldmVudCB1cGRhdGluZyB2YWx1ZSB3aGVuIHRoZSBzZWFyY2ggaXMgbm90IG9wZW5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ0lOUFVUX0NIQU5HRScsIHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgIHN0YXRlUmVkdWNlcjogKG9sZFN0YXRlLCB7IGNoYW5nZXMsIHR5cGUgfSkgPT4ge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25Fc2NhcGU6IHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4KC0xKTtcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRW50ZXI6XG4gICAgICAgICAgaWYgKHN0YXRlLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1BFTkRJTkdfRU5URVInLCBlbnRlclBlbmRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNlbGVjdCB0aGUgZmlyc3QgaXRlbSBpZiBub25lIGlzIGhpZ2hsaWdodGVkXG4gICAgICAgICAgaWYgKG9sZFN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHN0YXRlLnN1Z2dlc3Rpb25zWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgIC8vIGFsbG93cyB0YWJiaW5nIG91dCBvZiBpbnB1dCBmaWVsZCB3aXRob3V0IGNsb3NpbmdcbiAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0Qmx1cjoge1xuICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXRlbVRvU3RyaW5nKHN1Z2dlc3Rpb24pIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uID8gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pIDogJyc7XG4gICAgfSxcbiAgfSk7XG4gIC8vIGNhbGwgdG8gc3VwcHJlc3MgcmVmIGVycm9ycyBmcm9tIGRvd25zaGlmdFxuICBnZXRMYWJlbFByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG4gIGdldE1lbnVQcm9wcyh7fSwgeyBzdXBwcmVzc1JlZkVycm9yOiB0cnVlIH0pO1xuICBnZXRJbnB1dFByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG4gIGdldEl0ZW1Qcm9wcyh7IGluZGV4OiAtMSB9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG5cbiAgY29uc3QgeyBhcmlhUmVxdWlyZWRUZXh0LCBTZWFyY2hCYXJJZCwgYXJpYUN1cnJlbnRTdWdnZXN0aW9uIH0gPSBhcmlhUHJvcHM7XG4gIGNvbnN0IGFyaWFMYWJlbCA9IGFyaWFSZXF1aXJlZFRleHRcbiAgICAuY29uY2F0KCcgJylcbiAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgIC5jb25jYXQoJyAnKVxuICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKTtcbiAgcmV0dXJuIChcbiAgICA8UmVhY3RNb2RhbFxuICAgICAgaXNPcGVuPXtzdGF0ZS5yZW5kZXJNb2JpbGV9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsJ119XG4gICAgICBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1vdmVybGF5J119XG4gICAgICBzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2U9e2ZhbHNlfVxuICAgICAgc2hvdWxkQ2xvc2VPbkVzY1xuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1jb250ZW50J119XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBjb2xvcnMucHJpbWFyeSxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBjb2xvcnMuYWNjZXNzaWJsZVByaW1hcnksXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBjb2xvcnMuaG92ZXIsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtaWNvbiddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4KC0xKTtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpKSB7XG4gICAgICAgICAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleCgtMSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NhbmNlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwiYXJyb3dcIiBjb2xvcj17Y29sb3JzLnByaW1hcnl9IC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3JpZ2h0LWNvbHVtbiddfT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfVxuICAgICAgICAgICAgICBpZD17bGFiZWxJZH1cbiAgICAgICAgICAgICAgey4uLmdldExhYmVsUHJvcHMoKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge21vYmlsZUxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgICAgICBpc1BPSVNlYXJjaChpZClcbiAgICAgICAgICAgICAgICAgID8gdCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycsIHsgbG5nIH0pXG4gICAgICAgICAgICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICBnZXRJbnB1dFByb3BzPXtnZXRJbnB1dFByb3BzfVxuICAgICAgICAgICAgICBnZXRMYWJlbFByb3BzPXtnZXRMYWJlbFByb3BzfVxuICAgICAgICAgICAgICBjbGVhcklucHV0PXsoKSA9PiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgICAgICAgIGlucHV0UmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlckxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgY2xlYXJCdXR0b25Db2xvcj17Y29sb3JzLnByaW1hcnl9XG4gICAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8U3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N0YXRlLnN1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBnZXRNZW51UHJvcHM9e2dldE1lbnVQcm9wc31cbiAgICAgICAgICAgICAgZ2V0SXRlbVByb3BzPXtnZXRJdGVtUHJvcHN9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg9e2hpZ2hsaWdodGVkSW5kZXh9XG4gICAgICAgICAgICAgIGlzT3BlbiAvLyB3aGVuIG1vYmlsZSB2aWV3IGlzIG9wZW4gd2UgYWx3YXlzIHdhbnQgdG8gc2hvdyBzdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBoaWRkZW49e2ZhbHNlfVxuICAgICAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlckNsZWFySGlzdG9yeUJ1dHRvblxuICAgICAgICAgICAgICBoYW5kbGVDbGVhckhpc3Rvcnk9eygpID0+IHNldERpYWxvZ09wZW4odHJ1ZSl9XG4gICAgICAgICAgICAgIHsuLi5zdWdnZXN0aW9uUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgICAgaXNNb2RhbE9wZW49e2lzRGlhbG9nT3Blbn1cbiAgICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgICAgaGVhZGVyVGV4dD17dCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInLCB7IGxuZyB9KX1cbiAgICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17dCgnZGVsZXRlJywgeyBsbmcgfSl9XG4gICAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17dCgnY2FuY2VsJywgeyBsbmcgfSl9XG4gICAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXMoKTtcbiAgICAgICAgICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgICAgY29sb3JzPXtjb2xvcnN9XG4gICAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgICAgIGxhbmc9e2xuZ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3RNb2RhbD5cbiAgKTtcbn07XG5cbk1vYmlsZVZpZXcucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc3VnZ2VzdGlvblByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe30pLmlzUmVxdWlyZWQsXG4gIGFyaWFQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcmlhUmVxdWlyZWRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgU2VhcmNoQmFySWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGxuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdGF0ZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzdWdnZXN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHt9KSkuaXNSZXF1aXJlZCxcbiAgICByZW5kZXJNb2JpbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZGlzcGF0Y2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVWaWV3O1xuIiwiZXhwb3J0IGNvbnN0IHNlYXJjaFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnSU5QVVRfQ0hBTkdFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogYWN0aW9uLnZhbHVlLFxuICAgICAgfTtcbiAgICBjYXNlICdGRVRDSF9TVUdHRVNUSU9OUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZGluZzogYWN0aW9uLmxvYWRpbmcsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBhY3Rpb24uc3VnZ2VzdGlvbnMgfHwgc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgICB9O1xuICAgIGNhc2UgJ0NMRUFSX1NVR0dFU1RJT05TJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB9O1xuICAgIGNhc2UgJ1JFU0VUX1NPVVJDRVMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNvdXJjZXM6IGFjdGlvbi5zb3VyY2VzLFxuICAgICAgfTtcbiAgICBjYXNlICdTRVRfU09VUkNFUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2hvd093blBsYWNlczogYWN0aW9uLnNob3dPd25QbGFjZXMsXG4gICAgICAgIHNvdXJjZXM6IGFjdGlvbi5zb3VyY2VzLFxuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBhY3Rpb24ucGVuZGluZ1NlbGVjdGlvbixcbiAgICAgIH07XG4gICAgY2FzZSAnQ0xFQVInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgaXNDbGVhcmVkOiB0cnVlLFxuICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB9O1xuICAgIGNhc2UgJ0lOUFVUX0JMVVInOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdmFsdWU6IGFjdGlvbi52YWx1ZSB8fCBzdGF0ZS52YWx1ZSxcbiAgICAgICAgaXNDbGVhcmVkOiBhY3Rpb24uaXNNb2JpbGUgPyBmYWxzZSA6IHN0YXRlLmlzQ2xlYXJlZCxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgc2hvd093blBsYWNlczogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdSRVNFVCc6IHtcbiAgICAgIHJldHVybiBhY3Rpb24uaW5pdGlhbFN0YXRlO1xuICAgIH1cbiAgICBjYXNlICdQRU5ESU5HX0VOVEVSJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVudGVyUGVuZGluZzogYWN0aW9uLmVudGVyUGVuZGluZyxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1RPR0dMRV9NRU5VJzoge1xuICAgICAgaWYgKGFjdGlvbi5pc01vYmlsZSkge1xuICAgICAgICBpZiAoIXN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHJlbmRlck1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBzdGF0ZS5pc0NsZWFyZWQgPyAnJyA6IHN0YXRlLnZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICByZW5kZXJNb2JpbGU6IGZhbHNlLFxuICAgICAgICAgIGlzQ2xlYXJlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNNZW51T3BlbjogIXN0YXRlLmlzTWVudU9wZW4sXG4gICAgICAgIHJlbmRlck1vYmlsZTogYWN0aW9uLmlzTW9iaWxlICYmICFzdGF0ZS5yZW5kZXJNb2JpbGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlUmVkdWNlciB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciwgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGV4ZWN1dGVTZWFyY2ggfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlJztcbmltcG9ydCB7IHVzZUNvbWJvYm94IH0gZnJvbSAnZG93bnNoaWZ0JztcbmltcG9ydCBJY29uLCB7XG4gIGRlZmF1bHRDb2xvcnMsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi91dGlscy9pMThuJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9jb21wb25lbnRzL3N0eWxlcy5zY3NzJztcbmltcG9ydCB7IGdldFN1Z2dlc3Rpb25WYWx1ZSwgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgfSBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCBNb2JpbGVWaWV3IGZyb20gJy4vY29tcG9uZW50cy9Nb2JpbGVWaWV3JztcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnLi9jb21wb25lbnRzL0lucHV0JztcbmltcG9ydCB7IFN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9jb21wb25lbnRzL1N1Z2dlc3Rpb25zJztcbmltcG9ydCB7IHNlYXJjaFJlZHVjZXIgfSBmcm9tICcuL3V0aWxzL3NlYXJjaFJlZHVjZXInO1xuXG5jb25zdCBnZXRBcmlhUHJvcHMgPSAoe1xuICBpZCxcbiAgYXJpYUxhYmVsLFxuICBsbmcsXG4gIHQsXG4gIGlzTW9iaWxlLFxuICBzdWdnZXN0aW9ucyxcbiAgdmFsdWUsXG4gIHJlcXVpcmVkLFxufSkgPT4ge1xuICBjb25zdCBhcmlhQmFySWQgPSBpZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gIGNvbnN0IFNlYXJjaEJhcklkID1cbiAgICBhcmlhTGFiZWwgfHwgdChhcmlhQmFySWQsIHsgbG5nIH0pLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKS5jb25jYXQoJy4nKTsgLy8gRnVsbCBzdG9wIG1ha2VzIHNjcmVlbiByZWFkZXIgc3BlZWNoIGNsZWFyZXIuXG4gIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSByZXF1aXJlZCA/IGAke3QoJ3JlcXVpcmVkJywgeyBsbmcgfSl9LmAgOiAnJztcbiAgY29uc3QgYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zID0gaXNNb2JpbGVcbiAgICA/IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJywgeyBsbmcgfSlcbiAgICA6IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCcsIHsgbG5nIH0pO1xuICBjb25zdCBtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0ID1cbiAgICBpZCA9PT0gJ29yaWdpbidcbiAgICAgID8gdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nLCB7IGxuZyB9KVxuICAgICAgOiAnJztcbiAgY29uc3QgYXJpYUxhYmVsVGV4dCA9IGFyaWFMYWJlbEluc3RydWN0aW9uc1xuICAgIC5jb25jYXQoJyAnKVxuICAgIC5jb25jYXQobW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCk7XG5cbiAgY29uc3QgYXJpYVN1Z2dlc3Rpb25MZW4gPSB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJywge1xuICAgIGNvdW50OiBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgbG5nLFxuICB9KTtcblxuICBjb25zdCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gPVxuICAgIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KSB8fCB2YWx1ZVxuICAgICAgPyB0KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIGxuZyxcbiAgICAgICAgICBzZWxlY3Rpb246XG4gICAgICAgICAgICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCh7IHN1Z2dlc3Rpb25zLCB0LCBsbmcgfSkudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pXG4gICAgICA6ICcnO1xuXG4gIHJldHVybiB7XG4gICAgU2VhcmNoQmFySWQsXG4gICAgYXJpYVJlcXVpcmVkVGV4dCxcbiAgICBhcmlhTGFiZWxUZXh0LFxuICAgIGFyaWFTdWdnZXN0aW9uTGVuLFxuICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbixcbiAgfTtcbn07XG5cbmNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgJ1ZhbGl0dHUgc2lqYWludGknLFxuICAnTnlreWluZW4gc2lqYWludGlzaScsXG4gICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgJ1NlbGVjdGVkIGxvY2F0aW9uJyxcbiAgJ1ZhbGQgcG9zaXRpb24nLFxuICAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAnTWluIHBvc2l0aW9uJyxcbiAgJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICdZb3VyIGN1cnJlbnQgbG9jYXRpb24nLFxuICAnV3licmFuZSBtaWVqc2NlJyxcbl07XG5cbi8qKlxuICogVGFrZXMgdGhlIHRhcmdldHMgYW5kIG1vZGlmaWVzIHRoZW0gYmFzZWQgb24gb3duUGxhY2VzIGFuZCBpc0xvY2F0aW9uU2VhcmNoXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzLnRhcmdldHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuaXNMb2NhdGlvblNlYXJjaFxuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5pc01vYmlsZVxuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5vd25QbGFjZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzLnNvdXJjZXNcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gbmV3VGFyZ2V0c1xuICovXG5jb25zdCBnZXROZXdUYXJnZXRzID0gKHtcbiAgdGFyZ2V0cyxcbiAgaXNMb2NhdGlvblNlYXJjaCxcbiAgaXNNb2JpbGUsXG4gIG93blBsYWNlcyxcbiAgc291cmNlcyxcbn0pID0+IHtcbiAgY29uc3QgdXNlQWxsID0gIXRhcmdldHM/Lmxlbmd0aDtcbiAgbGV0IG5ld1RhcmdldHM7XG4gIGlmIChvd25QbGFjZXMpIHtcbiAgICBuZXdUYXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICB9XG4gICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0YXRpb25zJyk7XG4gICAgfVxuICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCF1c2VBbGwpIHtcbiAgICBuZXdUYXJnZXRzID0gWy4uLnRhcmdldHNdO1xuICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICBpZiAoXG4gICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAhaXNNb2JpbGUgJiZcbiAgICAgICghc291cmNlcy5sZW5ndGggfHwgc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgKSB7XG4gICAgICBuZXdUYXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1RhcmdldHM7XG59O1xuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBPcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBTdGF0aW9ucywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKlxuICogQHR5cGVkZWYgRFRBdXRvc3VnZ2VzdFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwRWxlbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhY2Vob2xkZXJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uU2VsZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ljb25dXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZhbHVlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW29uQ2xlYXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2xhbmddXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2dldEF1dG9TdWdnZXN0SWNvbnNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbaGFuZGxlVmlhUG9pbnRzXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW2ZvY3VzQ2hhbmdlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW3N0b3JlUmVmXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNNb2JpbGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vYmlsZUxhYmVsXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbnB1dENsYXNzTmFtZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHJhbnNsYXRlZFBsYWNlaG9sZGVyXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVxdWlyZWRdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2ZvbnRXZWlnaHRzXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtjb2xvcnNdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vZGVTZXRdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG93U2Nyb2xsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNFbWJlZGRlZF1cbiAqIEdlb2NvZGluZyByZWxhdGVkIHByb3BzXG4gKiBAcHJvcGVydHkge09iamVjdH0gc2VhcmNoQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0cmFuc3BvcnRNb2RlXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3RhcmdldHNdXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbc291cmNlc11cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZ2VvY29kaW5nU2l6ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtmaWx0ZXJSZXN1bHRzXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtwYXRoT3B0c11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcmVmUG9pbnRdXG4gKiBAcGFyYW0ge0RUQXV0b3N1Z2dlc3RQcm9wc30gcHJvcHNcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gRFRBdXRvc3VnZ2VzdCh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBwbGFjZWhvbGRlcixcbiAgb25TZWxlY3QsXG4gIGljb24sXG4gIHZhbHVlLFxuICBvbkNsZWFyLFxuICBsYW5nOiBsbmcsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnMsXG4gIGhhbmRsZVZpYVBvaW50cyxcbiAgZm9jdXNDaGFuZ2UsXG4gIHN0b3JlUmVmLFxuICBpc01vYmlsZSxcbiAgbW9iaWxlTGFiZWwsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXIsXG4gIHJlcXVpcmVkLFxuICBhcmlhTGFiZWwsXG4gIGZvbnRXZWlnaHRzLFxuICBjb2xvcnMsXG4gIG1vZGVTZXQsXG4gIHNob3dTY3JvbGwsXG4gIGlzRW1iZWRkZWQsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGZpbHRlclJlc3VsdHMsXG4gIHNlYXJjaENvbnRleHQsXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbn0pIHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICBzb3VyY2VzLFxuICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgaXNDbGVhcmVkOiBmYWxzZSxcbiAgICByZW5kZXJNb2JpbGU6IGZhbHNlLFxuICAgIHZhbHVlLFxuICAgIGVudGVyUGVuZGluZzogZmFsc2UsXG4gICAgaXNNZW51T3BlbjogZmFsc2UsXG4gIH07XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcihzZWFyY2hSZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuICAvLyBSZXNldCB0aGUgc3RhdGUgd2hlbiB2YWx1ZSBvciBzb3VyY2VzIGNoYW5nZSwgdGhpcyBhbHNvIHRyaWdnZXJzIGEgbmV3IHNlYXJjaFxuICB1c2VFZmZlY3QoKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnUkVTRVQnLCBpbml0aWFsU3RhdGUgfSksIFt2YWx1ZV0pO1xuICB1c2VFZmZlY3QoKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnUkVTRVRfU09VUkNFUycsIHNvdXJjZXMgfSksIFtzb3VyY2VzXSk7XG4gIC8vIGNyZWF0ZSBhbmQgc3RvcmUgaW5wdXQgcmVmIGluIHRoZSBwYXJlbnQgaWYgc3RvcmVSZWYgaXMgcHJvdmlkZWRcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYoaWQpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdG9yZVJlZikge1xuICAgICAgc3RvcmVSZWYoaW5wdXRSZWYuY3VycmVudCk7XG4gICAgfVxuICB9LCBbaW5wdXRSZWYuY3VycmVudF0pO1xuXG4gIGNvbnN0IGZldGNoU3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdXNlQWxsID0gIXRhcmdldHM/Lmxlbmd0aDtcbiAgICBjb25zdCBpc0xvY2F0aW9uU2VhcmNoID0gdXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpO1xuXG4gICAgY29uc3QgbmV3VGFyZ2V0cyA9IGdldE5ld1RhcmdldHMoe1xuICAgICAgdGFyZ2V0cyxcbiAgICAgIGlzTG9jYXRpb25TZWFyY2gsXG4gICAgICBpc01vYmlsZSxcbiAgICAgIG93blBsYWNlczogc3RhdGUuc2hvd093blBsYWNlcyxcbiAgICAgIHNvdXJjZXM6IHN0YXRlLnNvdXJjZXMsXG4gICAgfSk7XG4gICAgLy8gcmVtb3ZlICBsb2NhdGlvbiBmYXZvdXJpdGVzIGluIGRlc2t0b3Agc2VhcmNoIChjb2xsZWN0aW9uIGl0ZW0gcmVwbGFjZXMgaXQgaW4gdGFyZ2V0IGFycmF5KVxuICAgIGNvbnN0IG5ld1NvdXJjZXMgPSBzdGF0ZS5zb3VyY2VzXG4gICAgICA/IHN0YXRlLnNvdXJjZXMuZmlsdGVyKFxuICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICFpc0xvY2F0aW9uU2VhcmNoIHx8XG4gICAgICAgICAgICAhcyA9PT0gJ0Zhdm91cml0ZScgfHxcbiAgICAgICAgICAgIHN0YXRlLnNob3dPd25QbGFjZXMgfHxcbiAgICAgICAgICAgIGlzTW9iaWxlLFxuICAgICAgICApXG4gICAgICA6IHN0YXRlLnNvdXJjZXM7XG4gICAgZXhlY3V0ZVNlYXJjaChcbiAgICAgIG5ld1RhcmdldHMsXG4gICAgICBuZXdTb3VyY2VzLFxuICAgICAgdHJhbnNwb3J0TW9kZSxcbiAgICAgIHNlYXJjaENvbnRleHQsXG4gICAgICBmaWx0ZXJSZXN1bHRzLFxuICAgICAgZ2VvY29kaW5nU2l6ZSxcbiAgICAgIHtcbiAgICAgICAgaW5wdXQ6IHN0YXRlLnZhbHVlIHx8ICcnLFxuICAgICAgfSxcbiAgICAgIHNlYXJjaFJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdGRVRDSF9TVUdHRVNUSU9OUycsXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1N1Z2dlc3Rpb25zID0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICBzdWdnZXN0aW9uID0+XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJyB8fFxuICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnICYmXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLnRpbWUgPiBEYXRlLm5vdygpIC8gMTAwMCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkU3VnZ2VzdGlvbiA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICB0cmFuc2xhdGVkU3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQgPSB0KFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgIHsgbG5nIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkU3VnZ2VzdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ0ZFVENIX1NVR0dFU1RJT05TJyxcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBzdWdnZXN0aW9uczogbmV3U3VnZ2VzdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHBhdGhPcHRzLFxuICAgICAgcmVmUG9pbnQsXG4gICAgKTtcbiAgfSwgW1xuICAgIHN0YXRlLnZhbHVlLFxuICAgIHN0YXRlLnNvdXJjZXMsXG4gICAgc3RhdGUuc2hvd093blBsYWNlcyxcbiAgICB0YXJnZXRzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgaXNNb2JpbGUsXG4gICAgbG5nLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICAgIGlkLFxuICBdKTtcblxuICBjb25zdCBzZWxlY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHN1Z2dlc3Rpb24sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICBoYW5kbGVWaWFQb2ludHMoc3VnZ2VzdGlvbiwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25TZWxlY3Qoc3VnZ2VzdGlvbiwgaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvY3VzQ2hhbmdlICYmICghaXNNb2JpbGUgfHwgaXNFbWJlZGRlZCkpIHtcbiAgICAgICAgZm9jdXNDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzTW9iaWxlXSxcbiAgKTtcblxuICBjb25zdCBvblNlbGVjdGVkSXRlbUNoYW5nZSA9IGNoYW5nZXMgPT5cbiAgICBzZWxlY3RTdWdnZXN0aW9uKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLCBjaGFuZ2VzLmhpZ2hsaWdodGVkSW5kZXgpO1xuXG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJbnB1dFByb3BzLFxuICAgIGdldEl0ZW1Qcm9wcyxcbiAgICBzZWxlY3RJdGVtLFxuICAgIG9wZW5NZW51LFxuICAgIGNsb3NlTWVudSxcbiAgfSA9IHVzZUNvbWJvYm94KHtcbiAgICBpbnB1dElkOiBpZCxcbiAgICBpbnB1dFZhbHVlOiBzdGF0ZS52YWx1ZSxcbiAgICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogMCxcbiAgICBvbklucHV0VmFsdWVDaGFuZ2U6ICh7IGlucHV0VmFsdWUgfSkgPT5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ0lOUFVUX0NIQU5HRScsIHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgIHN0YXRlUmVkdWNlcjogdXNlQ2FsbGJhY2soXG4gICAgICAob2xkU3RhdGUsIHsgdHlwZSwgY2hhbmdlcyB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JdGVtQ2xpY2s6XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVudGVyOiB7XG4gICAgICAgICAgICAvLyBzZXRDbGVhcmVkKGZhbHNlKTtcbiAgICAgICAgICAgIC8vIGtlZXAgZW50ZXJQcmVzc2VkUmVmIHRvIG1ha2Ugc2VsZWN0aW9uIHdoZW4gc3VnZ2VzdGlvbnMgaGF2ZSBsb2FkZWRcbiAgICAgICAgICAgIGlmIChzdGF0ZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1BFTkRJTkdfRU5URVInLCBlbnRlclBlbmRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2hhbmdlcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHNlbGVjdGluZyBmcm9tIG93biBsb2NhdGlvbnMsIGtlZXAgbWVudSBvcGVuIGFuZCBrZWVwIG9sZCBzdGF0ZVxuICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1NFVF9TT1VSQ0VTJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBbJ0Zhdm91cml0ZScsICdCYWNrJ10sXG4gICAgICAgICAgICAgICAgc2hvd093blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBjaGFuZ2VzLnNlbGVjdGVkSXRlbS50eXBlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJdGVtLnR5cGUgPT09ICdiYWNrJykge1xuICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1NFVF9TT1VSQ0VTJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgICAgIHNob3dPd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0Q2xpY2s6IHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGlucHV0IGlmIGN1cnJlbnQgcG9zaXRpb24gb3Igc2VsZWN0ZWQgbG9jYXRpb24gaXMgc2hvd25cbiAgICAgICAgICAgIGlmIChwb3NpdGlvbnMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoYW5nZXMsIGlucHV0VmFsdWU6ICcnLCBpc09wZW46IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEJsdXI6IHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiBvbGRTdGF0ZS5zZWxlY3RJdGVtLFxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWU6IG9sZFN0YXRlLmlucHV0VmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVzY2FwZToge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgaW5wdXRWYWx1ZTogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbc3RhdGUubG9hZGluZywgdmFsdWUsIGlzTW9iaWxlXSxcbiAgICApLFxuICAgIGl0ZW1zOiBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICBpdGVtVG9TdHJpbmcoc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24gPyBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbikgOiAnJztcbiAgICB9LFxuICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlLFxuICAgIG9uSXNPcGVuQ2hhbmdlOiBjaGFuZ2VzID0+IHtcbiAgICAgIGlmIChjaGFuZ2VzLmlzT3BlbiAmJiAhc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGUgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGlucHV0T25CbHVyID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIGlzTW9iaWxlLFxuICAgICAgdmFsdWU6ICFpc01vYmlsZSAmJiB2YWx1ZSxcbiAgICAgIHR5cGU6ICdJTlBVVF9CTFVSJyxcbiAgICB9KTtcbiAgICBpZiAoIWlzTW9iaWxlKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdSRVNFVCcsXG4gICAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjbGVhcklucHV0ID0gcmVmID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdDTEVBUicgfSk7XG4gICAgaWYgKG9uQ2xlYXIpIHtcbiAgICAgIG9uQ2xlYXIoaWQpO1xuICAgIH1cbiAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIG9wZW5NZW51KCk7XG4gIH07XG5cbiAgLy8gRmV0Y2ggc3VnZ2VzdGlvbnMgd2hlbiBpc09wZW4sIHZhbHVlLCBvciBmZXRjaFN1Z2dlc3Rpb25zIGRlcGVuZGllcyBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuIHx8IHN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgZmV0Y2hTdWdnZXN0aW9ucyhzdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9LCBbaXNPcGVuLCBzdGF0ZS5yZW5kZXJNb2JpbGUsIHN0YXRlLnZhbHVlLCBmZXRjaFN1Z2dlc3Rpb25zXSk7XG5cbiAgLy8gdGhpcyBlZmZlY3QgaGFuZGxlcyBzZWxlY3RpbmcgdGhlIHN1Z2dlc3Rpb24gd2hlbiBlbnRlciB3YXMgcHJlc3NlZCBidXQgc3VnZ2VzdGlvbnMgd2VyZSBzdGlsbCBsb2FkaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLmVudGVyUGVuZGluZyAmJiAhc3RhdGUubG9hZGluZykge1xuICAgICAgc2VsZWN0U3VnZ2VzdGlvbihzdGF0ZS5zdWdnZXN0aW9uc1swXSwgMCk7XG4gICAgICBjbG9zZU1lbnUoKTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5sb2FkaW5nLCBzdGF0ZS5wZW5kaW5nRW50ZXIsIHN0YXRlLnN1Z2dlc3Rpb25zXSk7XG5cbiAgY29uc3QgYmFzZUl0ZW1Qcm9wcyA9IHtcbiAgICBsb2FkaW5nOiBzdGF0ZS5sb2FkaW5nLFxuICAgIGlzTW9iaWxlLFxuICAgIGFyaWFGYXZvdXJpdGVTdHJpbmc6IHQoJ2Zhdm91cml0ZScsIHsgbG5nIH0pLFxuICAgIGZvbnRXZWlnaHRzLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnMsXG4gICAgY29sb3JzLFxuICAgIG1vZGVTZXQsXG4gIH07XG5cbiAgY29uc3Qge1xuICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbixcbiAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgIFNlYXJjaEJhcklkLFxuICAgIGFyaWFMYWJlbFRleHQsXG4gIH0gPSBnZXRBcmlhUHJvcHMoe1xuICAgIGlkLFxuICAgIGxuZyxcbiAgICB0LFxuICAgIGlzTW9iaWxlLFxuICAgIGFyaWFMYWJlbCxcbiAgICBzdWdnZXN0aW9uczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgdmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgIHJlcXVpcmVkLFxuICB9KTtcblxuICBjb25zdCBtb2JpbGVDbGVhck9sZFNlYXJjaGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGV4dCwgY2xlYXJPbGRTZWFyY2hlcywgY2xlYXJGdXR1cmVSb3V0ZXMgfSA9IHNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGZldGNoU3VnZ2VzdGlvbnMoc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVuZGVyTW9iaWxlICYmICFpc09wZW4pIHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUJywgaW5pdGlhbFN0YXRlIH0pO1xuICAgIH1cbiAgfSwgW3N0YXRlLnJlbmRlck1vYmlsZSwgaXNPcGVuXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgPE1vYmlsZVZpZXdcbiAgICAgICAgICBwbGFjZWhvbGRlcj17dChwbGFjZWhvbGRlciwgeyBsbmcgfSl9XG4gICAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e21vYmlsZUNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgICBtb2JpbGVMYWJlbD17bW9iaWxlTGFiZWwgfHwgdChpZCwgeyBsbmcgfSl9XG4gICAgICAgICAgYXJpYVByb3BzPXt7XG4gICAgICAgICAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gICAgICAgICAgICBTZWFyY2hCYXJJZCxcbiAgICAgICAgICAgIGFyaWFSZXF1aXJlZFRleHQsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U9e29uU2VsZWN0ZWRJdGVtQ2hhbmdlfVxuICAgICAgICAgIHZhbHVlPXtzdGF0ZS52YWx1ZX1cbiAgICAgICAgICBjbGVhcklucHV0PXtjbGVhcklucHV0fVxuICAgICAgICAgIHN1Z2dlc3Rpb25Qcm9wcz17YmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgICBzaG93U2Nyb2xsPXshIXNob3dTY3JvbGx9XG4gICAgICAgICAgY29sb3JzPXtjb2xvcnN9XG4gICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgIHN0eWxlc1tpZF0sXG4gICAgICAgICAgc3RhdGUucmVuZGVyTW9iaWxlICYmICdoaWRkZW4nLFxuICAgICAgICBdKX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGNvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogY29sb3JzLmhvdmVyLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7aWNvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgIHN0eWxlc1snYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbiddLFxuICAgICAgICAgICAgICBzdHlsZXNbaWRdLFxuICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZSAmJiBzdHlsZXNbYCR7aW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gXSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQodCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJywgeyBsbmcgfSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz17YCR7aWNvbn1gfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8SW5wdXRcbiAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgYXJpYUxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb25cbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBnZXRJbnB1dFByb3BzPXtnZXRJbnB1dFByb3BzfVxuICAgICAgICAgIGdldExhYmVsUHJvcHM9e2dldExhYmVsUHJvcHN9XG4gICAgICAgICAgc2VsZWN0SXRlbT17c2VsZWN0SXRlbX1cbiAgICAgICAgICB2YWx1ZT17c3RhdGUudmFsdWV9XG4gICAgICAgICAgY2xlYXJJbnB1dD17Y2xlYXJJbnB1dH1cbiAgICAgICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgY2xlYXJCdXR0b25Db2xvcj17Y29sb3JzLnByaW1hcnl9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3RyYW5zbGF0ZWRQbGFjZWhvbGRlciB8fCB0KHBsYWNlaG9sZGVyLCB7IGxuZyB9KX1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX1cbiAgICAgICAgICBpc01vYmlsZT17aXNNb2JpbGV9XG4gICAgICAgICAgaW5wdXRPbkJsdXI9e2lucHV0T25CbHVyfVxuICAgICAgICAvPlxuXG4gICAgICAgIDxTdWdnZXN0aW9uc1xuICAgICAgICAgIGhpZGRlbj17IWlzT3BlbiB8fCBpc01vYmlsZX1cbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgIGdldE1lbnVQcm9wcz17Z2V0TWVudVByb3BzfVxuICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICB7Li4uYmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5EVEF1dG9zdWdnZXN0LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xlYXJGdXR1cmVSb3V0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH0pLFxuICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVmUG9pbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICB9KSxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG4gIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkRUQXV0b3N1Z2dlc3QuZGVmYXVsdFByb3BzID0ge1xuICBpY29uOiB1bmRlZmluZWQsXG4gIHZhbHVlOiAnJyxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgbGFuZzogJ2ZpJyxcbiAgc3RvcmVSZWY6IHVuZGVmaW5lZCxcbiAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gIGZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgc291cmNlczogW10sXG4gIHRhcmdldHM6IHVuZGVmaW5lZCxcbiAgaXNNb2JpbGU6IGZhbHNlLFxuICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgZ2VvY29kaW5nU2l6ZTogdW5kZWZpbmVkLFxuICBwYXRoT3B0czoge1xuICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgfSxcbiAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIGZvbnRXZWlnaHRzOiB7XG4gICAgbWVkaXVtOiA1MDAsXG4gIH0sXG4gIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgcmVxdWlyZWQ6IGZhbHNlLFxuICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IGZhbHNlLFxuICByZWZQb2ludDoge30sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgIDxEVEF1dG9zdWdnZXN0IHsuLi5wcm9wc30gLz5cbiAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGFkbWluIiwiaW5jbHVkZXMiLCJsYXllciIsImdpZCIsImxhYmVsSWQiLCJndGZzSWQiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwic3BsaXRTaG9ydE5hbWVBdExldHRlcnMiLCJ0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMiLCJ0ZXN0IiwiTGF5ZXJUeXBlIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwiZmlsdGVyIiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImVsZW1lbnQiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsInNlcmlhbGl6ZSIsIm9iaiIsInByZWZpeCIsImtleXMiLCJwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJheGlvcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwiX29iamVjdFNwcmVhZCIsImxheWVycyIsInRvU3RyaW5nIiwiZmVhdHVyZXMiLCJnZXRTdG9wc0Zyb21HZW9jb2RpbmciLCJzdG9wcyIsIlVSTF9QRUxJQVNfUExBQ0UiLCJnaWRzIiwic3RvcFN0YXRpb25NYXAiLCJzdG9wIiwiY29kZSIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJzbGljZSIsImFkZGVuZHVtIiwibGFzdFVwZGF0ZWQiLCJmYXZvdXJpdGVJZCIsImZpbHRlck9sZFNlYXJjaGVzIiwib2xkU2VhcmNoZXMiLCJkcm9wTGF5ZXJzIiwibWF0Y2hpbmdPbGRTZWFyY2hlcyIsInRha2UiLCJuZXdJdGVtIiwidGltZXRhYmxlQ2xpY2tlZCIsImFycm93Q2xpY2tlZCIsInJvdXRlTGF5ZXJzIiwibG9jYXRpb25MYXllcnMiLCJwYXJraW5nTGF5ZXJzIiwic3RvcExheWVycyIsImRlYm91bmNlZFNlYXJjaCIsImRlYm91bmNlIiwidGFyZ2V0cyIsInRyYW5zcG9ydE1vZGUiLCJzZWFyY2hDb250ZXh0IiwiZmlsdGVyUmVzdWx0cyIsImdlb2NvZGluZ1NpemUiLCJjYWxsYmFjayIsInBhdGhPcHRzIiwicmVmUG9pbnQiLCJnZXRQb3NpdGlvbnMiLCJnZXRGYXZvdXJpdGVMb2NhdGlvbnMiLCJnZXRPbGRTZWFyY2hlcyIsImdldEZhdm91cml0ZVN0b3BzIiwicGFya2luZ0FyZWFTb3VyY2VzIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkiLCJnZXRGYXZvdXJpdGVSb3V0ZXMiLCJnZXRSb3V0ZXNRdWVyeSIsImNvbnRleHQiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJsb2NhdGlvbkF3YXJlIiwiVVJMX1BFTElBUyIsImZlZWRJRHMiLCJnZW9jb2RpbmdTZWFyY2hQYXJhbXMiLCJnZW9jb2RpbmdTb3VyY2VzIiwiZ2V0RnV0dXJlUm91dGVzIiwiY2l0eUJpa2VOZXR3b3JrcyIsImFsbFRhcmdldHMiLCJhbGxTb3VyY2VzIiwicG9zaXRpb24iLCJzZWFyY2hDb21wb25lbnRzIiwic2VhcmNoZXMiLCJsYW5ndWFnZSIsImxhdCIsImxvbiIsInRvRml4ZWQiLCJtb2RlIiwic3RhdHVzIiwicHVzaCIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJsb2NhdGlvbkhpc3RvcnkiLCJzaXplIiwiZmVlZElkcyIsImhpc3RvcnkiLCJ1c2VTdG9wcyIsInVzZVN0YXRpb25zIiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5Iiwic3RvcHNTdGF0aW9ucyIsInMiLCJmaWx0ZXJGYXZvdXJpdGVTdG9wcyIsImRlZHVwZXN0b3BzIiwiZmVlZHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiYWxsIiwiZmxhdHRlbiIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJsZWFkaW5nIiwiaTE4biIsImNyZWF0ZUluc3RhbmNlIiwiZmFsbGJhY2tMbmciLCJyZXNvdXJjZXMiLCJkZSIsInRyYW5zbGF0aW9uIiwiYWlycGxhbmUiLCJhcnJpdmFsIiwiYmFjayIsImJpa2VyZW50YWxzdGF0aW9uIiwiYnVzIiwiY2FuY2VsIiwiY3VycmVudHBvc2l0aW9uIiwiZGVsZXRlIiwiZGVwYXJ0dXJlIiwiZmF2b3VyaXRlIiwiZmVycnkiLCJvd25sb2NhdGlvbnMiLCJsb2FkaW5nIiwicmFpbCIsInN0cmVldCIsInN1YndheSIsInN0YXRpb24iLCJ0cmFtIiwidmVudWUiLCJ3aGVyZSIsInBsYWNlIiwiZW4iLCJiaWtlcGFyayIsImNhcnBhcmsiLCJwbGF0Zm9ybSIsInJlcXVpcmVkIiwidHJhY2siLCJmaSIsInZlaGljbGVyZW50YWxzdGF0aW9uIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiaW5pdCIsImdldExvY2FsYWRtaW4iLCJzdWdnZXN0aW9uIiwiZ2V0U3RvcENvZGUiLCJnZXROYW1lTGFiZWwiLCJtZW1vaXplIiwicGxhaW4iLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJsb25nTmFtZSIsImFnZW5jeSIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJjbG9uZURlZXAiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsImtleSIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiaXNQT0lTZWFyY2giLCJnZXRQbGF0Zm9ybSIsImxuZyIsIkdURlMiLCJtb2RlcyIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsImxvY2FsaXR5IiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwidGltZSIsIkRhdGVUaW1lIiwiZnJvbVNlY29uZHMiLCJub3ciLCJhcnJpdmVCeSIsImhhc1NhbWUiLCJwbHVzIiwiZGF5cyIsInRvRm9ybWF0IiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiZ2V0TGFiZWwiLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsInN1Z2dlc3Rpb25zIiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0Iiwic2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlJCQwIiwibiIsImciLCJ3aW5kb3ciLCJ0aGlzIiwiaWdub3JlIiwiaGVhZGVyIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwib2Zmc2V0IiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiYXJndW1lbnRzIiwiaGFzT3duUHJvcGVydHkiLCJjaGFyQXQiLCJzdWJzdHIiLCJ1IiwiY2hhckNvZGVBdCIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIm1heCIsImJvZHkiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJvdXRsaW5lIiwic2Nyb2xsVG8iLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJkZXRhaWwiLCJhbmNob3IiLCJ0b2dnbGUiLCJkaXNwYXRjaEV2ZW50IiwiYyIsImEiLCJsIiwiZiIsImQiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJoIiwibSIsInRhZ05hbWUiLCJ5IiwicGFnZVlPZmZzZXQiLCJxdWVyeVNlbGVjdG9yIiwiYiIsInciLCJFIiwiTyIsIm9mZnNldFBhcmVudCIsIm1pbiIsImlubmVySGVpZ2h0IiwiUyIsIl8iLCJJIiwiTSIsIkwiLCJmbG9vciIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInB1c2hTdGF0ZSIsInNtb290aFNjcm9sbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aXRsZSIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiaG9zdG5hbWUiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiaHJlZiIsImRlY29kZVVSSUNvbXBvbmVudCIsImhhc2giLCJyZXBsYWNlU3RhdGUiLCJzdGF0ZSIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhcHBseSIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwidXNlRWxlbWVudFNpemUiLCJ1c2VSZWYiLCJ3aWR0aCIsImNsaWVudFdpZHRoIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsInVub2JzZXJ2ZSIsImNvbnRhaW5lclJlZiIsImlzVmlzaWJsZSIsInVzZUlzQnJlYWtwb2ludCIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJpbm5lcldpZHRoIiwidXNlT25SZXNpemUiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVJ1bkFmdGVyVXBkYXRlIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwidG9wIiwidW5sb2NrIiwiX19pbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsInVzZVNtb290aFNjcm9sbCIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIlN1Z2dlc3Rpb24iLCJfcmVmIiwiZ2V0SXRlbVByb3BzIiwiaGlnaGxpZ2h0ZWRJbmRleCIsIml0ZW1JbmRleCIsInN0eWxlcyIsInJlc3QiLCJfZXhjbHVkZWQiLCJ1c2VUcmFuc2xhdGlvbiIsImNvbnRlbnQiLCJSZWFjdCIsImFzc2lnbiIsImNsYXNzTmFtZSIsImN4Iiwic3VnZ2VzdGlvbkhpZ2hsaWdodGVkIiwiaW5kZXgiLCJTdWdnZXN0aW9uSXRlbSIsIml0ZW1TaGFwZSIsIlByb3BUeXBlcyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInNoYXBlIiwic3RyaW5nIiwic2VsZWN0ZWRJY29uSWQiLCJpY29uQ29sb3IiLCJjb2xvciIsImJvb2wiLCJTdWdnZXN0aW9ucyIsIl9yZWYyIiwiZ2V0TWVudVByb3BzIiwiaGlkZGVuIiwicmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uIiwiaGFuZGxlQ2xlYXJIaXN0b3J5IiwiX2V4Y2x1ZGVkMiIsInN1Z2dlc3Rpb25zQ29udGFpbmVyT3BlbiIsInN1Z2dlc3Rpb25zQ29udGFpbmVyIiwic3VnZ2VzdGlvbnNMaXN0Iiwib25DbGljayIsInByb3BUeXBlcyIsImlzUmVxdWlyZWQiLCJmdW5jIiwibnVtYmVyIiwib2JqZWN0T2YiLCJhcnJheU9mIiwiZGVmYXVsdFByb3BzIiwiQ2xlYXJCdXR0b24iLCJjbGVhcklucHV0Iiwib25LZXlEb3duIiwiSWNvbiIsImltZyIsInBsYWNlaG9sZGVyIiwiZ2V0SW5wdXRQcm9wcyIsImdldExhYmVsUHJvcHMiLCJhcmlhTGFiZWwiLCJpbnB1dFJlZiIsInJlbmRlckxhYmVsIiwiaXNNb2JpbGUiLCJpbnB1dENsYXNzTmFtZSIsImNsZWFyQnV0dG9uQ29sb3IiLCJhdXRvRm9jdXMiLCJpbnB1dE9uQmx1ciIsImNvbnRhaW5lciIsImh0bWxGb3IiLCJ0aGluIiwiaGFzVmFsdWUiLCJvbkJsdXIiLCJvbmVPZlR5cGUiLCJvYmplY3QiLCJNb2JpbGVWaWV3IiwiYXBwRWxlbWVudCIsIm9uU2VsZWN0ZWRJdGVtQ2hhbmdlIiwiZm9udFdlaWdodHMiLCJjbGVhck9sZFNlYXJjaGVzIiwic3VnZ2VzdGlvblByb3BzIiwiYXJpYVByb3BzIiwibW9iaWxlTGFiZWwiLCJzaG93U2Nyb2xsIiwiZGlzcGF0Y2giLCJjb2xvcnMiLCJob29rcyIsIm1vYmlsZVN0eWxlcyIsIm1vYmlsZU5vU2Nyb2xsU3R5bGVzIiwiaW5wdXRJZCIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsInJlbmRlck1vYmlsZSIsInNldEhpZ2hsaWdodGVkSW5kZXgiLCJ1c2VDb21ib2JveCIsImlucHV0VmFsdWUiLCJpc09wZW4iLCJjaGFuZ2VzIiwic2VsZWN0ZWRJdGVtIiwiZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXgiLCJvbklucHV0VmFsdWVDaGFuZ2UiLCJzdGF0ZVJlZHVjZXIiLCJvbGRTdGF0ZSIsInN0YXRlQ2hhbmdlVHlwZXMiLCJJbnB1dEtleURvd25Fc2NhcGUiLCJJbnB1dEtleURvd25FbnRlciIsImVudGVyUGVuZGluZyIsIklucHV0Qmx1ciIsIml0ZW1Ub1N0cmluZyIsInN1cHByZXNzUmVmRXJyb3IiLCJhcmlhUmVxdWlyZWRUZXh0IiwiU2VhcmNoQmFySWQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJvdmVybGF5Q2xhc3NOYW1lIiwic2hvdWxkUmV0dXJuRm9jdXNBZnRlckNsb3NlIiwic2hvdWxkQ2xvc2VPbkVzYyIsInByaW1hcnkiLCJhY2Nlc3NpYmxlUHJpbWFyeSIsImhvdmVyIiwibWVkaXVtIiwidGFiSW5kZXgiLCJEaWFsb2dNb2RhbCIsImlzTW9kYWxPcGVuIiwiaGFuZGxlQ2xvc2UiLCJoZWFkZXJUZXh0IiwicHJpbWFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwic2VhcmNoUmVkdWNlciIsImFjdGlvbiIsInNob3dPd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwiaXNDbGVhcmVkIiwiaW5pdGlhbFN0YXRlIiwiaXNNZW51T3BlbiIsInBvc2l0aW9ucyIsIkRUQXV0b3N1Z2dlc3QiLCJvblNlbGVjdCIsImljb24iLCJvbkNsZWFyIiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsImhhbmRsZVZpYVBvaW50cyIsImZvY3VzQ2hhbmdlIiwic3RvcmVSZWYiLCJ0cmFuc2xhdGVkUGxhY2Vob2xkZXIiLCJtb2RlU2V0IiwiaXNFbWJlZGRlZCIsInVzZVJlZHVjZXIiLCJmZXRjaFN1Z2dlc3Rpb25zIiwiaXNMb2NhdGlvblNlYXJjaCIsIm5ld1RhcmdldHMiLCJnZXROZXdUYXJnZXRzIiwib3duUGxhY2VzIiwidXNlQWxsIiwiZXhlY3V0ZVNlYXJjaCIsInNlYXJjaFJlc3VsdCIsIm5ld1N1Z2dlc3Rpb25zIiwiRGF0ZSIsInRyYW5zbGF0ZWRTdWdnZXN0aW9uIiwic2VsZWN0U3VnZ2VzdGlvbiIsImJsdXIiLCJzZWxlY3RJdGVtIiwib3Blbk1lbnUiLCJjbG9zZU1lbnUiLCJJdGVtQ2xpY2siLCJJbnB1dENsaWNrIiwib25Jc09wZW5DaGFuZ2UiLCJwZW5kaW5nRW50ZXIiLCJiYXNlSXRlbVByb3BzIiwiYXJpYUZhdm91cml0ZVN0cmluZyIsImFyaWFMYWJlbFRleHQiLCJnZXRBcmlhUHJvcHMiLCJhcmlhQmFySWQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYVN1Z2dlc3Rpb25MZW4iLCJjb3VudCIsInNlbGVjdGlvbiIsIkZyYWdtZW50IiwibW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyIsImNsZWFyRnV0dXJlUm91dGVzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJkZWZhdWx0Q29sb3JzIiwicHJvcHMiLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiJ5eURBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0Ys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