@digitransit-component/digitransit-component-autosuggest 7.1.5 → 7.1.7
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.
- package/lib/index.development.js +3 -3
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/package.json +3 -3
package/lib/index.development.js
CHANGED
|
@@ -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,n,u,o,r,i,s,a,l,c,d,p,f,h,g,b,m,E,y,A,F,D){"use strict";function C(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=C(t),_=C(n),B=C(o),w=C(r),S=C(i),O=C(s),k=C(a),x=C(l),R=C(c),j=C(d),P=C(f),M=C(b),N=C(m),T=C(E),L=C(A),I=C(F),q=C(D);function z(e){return z="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},z(e)}function U(e){var t=function(e,t){if("object"!=z(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var u=n.call(e,t||"default");if("object"!=z(u))return u;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==z(t)?t:t+""}function H(e,t,n){return(t=U(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function V(e,t){return e&&t&&e===t}const W=["stop","station","favouriteStop","favouriteStation"],$=["favouriteVehicleRentalStation","bikestation"];function G(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function K(e,t){const n=e.properties,u=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,o=u.origin,r=u.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($.includes(n.layer)&&$.includes(u.layer)){return(n.gid||G(n.labelId))===(u.gid||G(u.labelId))}if(n.gtfsId&&u.gtfsId)return n.gtfsId===u.gtfsId;if(W.includes(n.layer)&&W.includes(u.layer)&&n.gid&&u.gid)return n.gid===u.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(n.name,u.name)||V(n.label,u.label)||V(n.address,u.address)||V(n.address,u.label)||V(n.label,u.address)))}const J=e=>k.default(e)?e.toLowerCase():"",Q=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),X=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),Z="back",Y="currentPosition",ee="favouriteStop",te="favouriteStation",ne="favouritePlace",ue="favouriteRoute",oe="favouriteVehicleRentalStation",re="futureRoute",ie="station",se="selectFromMap",ae="ownLocations",le="stop",ce="bikestation",de="carpark",pe="bikepark",fe=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,he=(e,t)=>{switch(e){case Y:return 1;case Z:return.9;case se:return.8;case ae:return.79;case te:case ne:case ee:case ue:case oe:return.45;case re:return.44;case ie:return k.default(t)&&0===t.indexOf("gtfs")?.43:.42;case de:case pe:case ce:return.38;case le:return.36;default:return.41}},ge=(e,t,n="")=>{if(!Array.isArray(t)||!t.length)return t;const u=t=>k.default(t)&&e&&e.test(t),o=J(n),r=u(o),i=x.default(t.filter(e=>e),[e=>r&&u(J(e.properties.shortName))&&0===J(e.properties.shortName).indexOf(o)?1:0,e=>{const{confidence:t,layer:n,source:u}=e.properties;if(0===o.length)return he(n,u);if(!t)return he(n,u)+((e,t)=>k.default(e)&&0!==e.length?["name","label","address","shortName"].map(e=>({name:e,value:t[e]})).filter(e=>k.default(e.value)&&e.value.length>0).map(t=>{let n=J(t.value);return 0===n.indexOf(e)?("shortName"===t.name&&X(n)&&([n]=Q(n)),.5+e.length/n.length):.5*e.length/(e.length+1)}).reduce((e,t)=>t>e?t:e,0):0)(o,e.properties);switch(n){case ie:return t+(0===u.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 X(e.properties.shortName)?Q(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return X(e.properties.shortName)?Q(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return R.default(i,K)},be=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function me(e,t,n){if("string"==typeof t&&t.length>0){const u=t.toLowerCase().trim(),o=u.includes(" ")||u.includes(",");return e.filter(e=>{let t=[];n.forEach(n=>{let u=j.default(e,n);o||"properties.label"!==n&&"address"!==n||!u||(u=u.split(","),u.length>2?u.splice(u.length-2,2):u.length>1&&u.splice(u.length-1,1),u=u.join(",")),u&&(t=o?t.concat(u.toLowerCase()):t.concat(u.toLowerCase().replace(/,/g," ").split(" ")))});for(let e=0;e<t.length;e++)if(0===t[e].indexOf(u))return!0;return!1})}return e}function Ee(e,t){return function(){return e.apply(t,arguments)}}const{toString:ye}=Object.prototype,{getPrototypeOf:Ae}=Object,{iterator:Fe,toStringTag:De}=Symbol,Ce=(ve=Object.create(null),e=>{const t=ye.call(e);return ve[t]||(ve[t]=t.slice(8,-1).toLowerCase())});var ve;const _e=e=>(e=e.toLowerCase(),t=>Ce(t)===e),Be=e=>t=>typeof t===e,{isArray:we}=Array,Se=Be("undefined");function Oe(e){return null!==e&&!Se(e)&&null!==e.constructor&&!Se(e.constructor)&&Re(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const ke=_e("ArrayBuffer");const xe=Be("string"),Re=Be("function"),je=Be("number"),Pe=e=>null!==e&&"object"==typeof e,Me=e=>{if("object"!==Ce(e))return!1;const t=Ae(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||De in e||Fe in e)},Ne=_e("Date"),Te=_e("File"),Le=_e("Blob"),Ie=_e("FileList"),qe=_e("URLSearchParams"),[ze,Ue,He,Ve]=["ReadableStream","Request","Response","Headers"].map(_e);function We(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let u,o;if("object"!=typeof e&&(e=[e]),we(e))for(u=0,o=e.length;u<o;u++)t.call(null,e[u],u,e);else{if(Oe(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),r=o.length;let i;for(u=0;u<r;u++)i=o[u],t.call(null,e[i],i,e)}}function $e(e,t){if(Oe(e))return null;t=t.toLowerCase();const n=Object.keys(e);let u,o=n.length;for(;o-- >0;)if(u=n[o],t===u.toLowerCase())return u;return null}const Ge="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Ke=e=>!Se(e)&&e!==Ge;const Je=(Qe="undefined"!=typeof Uint8Array&&Ae(Uint8Array),e=>Qe&&e instanceof Qe);var Qe;const Xe=_e("HTMLFormElement"),Ze=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Ye=_e("RegExp"),et=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),u={};We(n,(n,o)=>{let r;!1!==(r=t(n,o,e))&&(u[o]=r||n)}),Object.defineProperties(e,u)};const tt=_e("AsyncFunction"),nt=(ut="function"==typeof setImmediate,ot=Re(Ge.postMessage),ut?setImmediate:ot?(rt=`axios@${Math.random()}`,it=[],Ge.addEventListener("message",({source:e,data:t})=>{e===Ge&&t===rt&&it.length&&it.shift()()},!1),e=>{it.push(e),Ge.postMessage(rt,"*")}):e=>setTimeout(e));var ut,ot,rt,it;const st="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Ge):"undefined"!=typeof process&&process.nextTick||nt;var at={isArray:we,isArrayBuffer:ke,isBuffer:Oe,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||Re(e.append)&&("formdata"===(t=Ce(e))||"object"===t&&Re(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&ke(e.buffer),t},isString:xe,isNumber:je,isBoolean:e=>!0===e||!1===e,isObject:Pe,isPlainObject:Me,isEmptyObject:e=>{if(!Pe(e)||Oe(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:ze,isRequest:Ue,isResponse:He,isHeaders:Ve,isUndefined:Se,isDate:Ne,isFile:Te,isBlob:Le,isRegExp:Ye,isFunction:Re,isStream:e=>Pe(e)&&Re(e.pipe),isURLSearchParams:qe,isTypedArray:Je,isFileList:Ie,forEach:We,merge:function e(){const{caseless:t,skipUndefined:n}=Ke(this)&&this||{},u={},o=(o,r)=>{if("__proto__"===r||"constructor"===r||"prototype"===r)return;const i=t&&$e(u,r)||r;Me(u[i])&&Me(o)?u[i]=e(u[i],o):Me(o)?u[i]=e({},o):we(o)?u[i]=o.slice():n&&Se(o)||(u[i]=o)};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&We(arguments[e],o);return u},extend:(e,t,n,{allOwnKeys:u}={})=>(We(t,(t,u)=>{n&&Re(t)?Object.defineProperty(e,u,{value:Ee(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,u,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:u}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,u)=>{e.prototype=Object.create(t.prototype,u),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,u)=>{let o,r,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),r=o.length;r-- >0;)i=o[r],u&&!u(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&Ae(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:Ce,kindOfTest:_e,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const u=e.indexOf(t,n);return-1!==u&&u===n},toArray:e=>{if(!e)return null;if(we(e))return e;let t=e.length;if(!je(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Fe]).call(e);let u;for(;(u=n.next())&&!u.done;){const n=u.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const u=[];for(;null!==(n=e.exec(t));)u.push(n);return u},isHTMLForm:Xe,hasOwnProperty:Ze,hasOwnProp:Ze,reduceDescriptors:et,freezeMethods:e=>{et(e,(t,n)=>{if(Re(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const u=e[n];Re(u)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},u=e=>{e.forEach(e=>{n[e]=!0})};return we(e)?u(e):u(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:$e,global:Ge,isContextDefined:Ke,isSpecCompliantForm:function(e){return!!(e&&Re(e.append)&&"FormData"===e[De]&&e[Fe])},toJSONObject:e=>{const t=new Array(10),n=(e,u)=>{if(Pe(e)){if(t.indexOf(e)>=0)return;if(Oe(e))return e;if(!("toJSON"in e)){t[u]=e;const o=we(e)?[]:{};return We(e,(e,t)=>{const r=n(e,u+1);!Se(r)&&(o[t]=r)}),t[u]=void 0,o}}return e};return n(e,0)},isAsyncFn:tt,isThenable:e=>e&&(Pe(e)||Re(e))&&Re(e.then)&&Re(e.catch),setImmediate:nt,asap:st,isIterable:e=>null!=e&&Re(e[Fe])};class lt extends Error{static from(e,t,n,u,o,r){const i=new lt(e.message,t||e.code,n,u,o);return i.cause=e,i.name=e.name,r&&Object.assign(i,r),i}constructor(e,t,n,u,o){super(e),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),u&&(this.request=u),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:at.toJSONObject(this.config),code:this.code,status:this.status}}}lt.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",lt.ERR_BAD_OPTION="ERR_BAD_OPTION",lt.ECONNABORTED="ECONNABORTED",lt.ETIMEDOUT="ETIMEDOUT",lt.ERR_NETWORK="ERR_NETWORK",lt.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",lt.ERR_DEPRECATED="ERR_DEPRECATED",lt.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",lt.ERR_BAD_REQUEST="ERR_BAD_REQUEST",lt.ERR_CANCELED="ERR_CANCELED",lt.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",lt.ERR_INVALID_URL="ERR_INVALID_URL";var ct=lt;function dt(e){return at.isPlainObject(e)||at.isArray(e)}function pt(e){return at.endsWith(e,"[]")?e.slice(0,-2):e}function ft(e,t,n){return e?e.concat(t).map(function(e,t){return e=pt(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const ht=at.toFlatObject(at,{},null,function(e){return/^is[A-Z]/.test(e)});function gt(e,t,n){if(!at.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const u=(n=at.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!at.isUndefined(t[e])})).metaTokens,o=n.visitor||l,r=n.dots,i=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&at.isSpecCompliantForm(t);if(!at.isFunction(o))throw new TypeError("visitor must be a function");function a(e){if(null===e)return"";if(at.isDate(e))return e.toISOString();if(at.isBoolean(e))return e.toString();if(!s&&at.isBlob(e))throw new ct("Blob is not supported. Use a Buffer instead.");return at.isArrayBuffer(e)||at.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,o){let s=e;if(e&&!o&&"object"==typeof e)if(at.endsWith(n,"{}"))n=u?n:n.slice(0,-2),e=JSON.stringify(e);else if(at.isArray(e)&&function(e){return at.isArray(e)&&!e.some(dt)}(e)||(at.isFileList(e)||at.endsWith(n,"[]"))&&(s=at.toArray(e)))return n=pt(n),s.forEach(function(e,u){!at.isUndefined(e)&&null!==e&&t.append(!0===i?ft([n],u,r):null===i?n:n+"[]",a(e))}),!1;return!!dt(e)||(t.append(ft(o,n,r),a(e)),!1)}const c=[],d=Object.assign(ht,{defaultVisitor:l,convertValue:a,isVisitable:dt});if(!at.isObject(e))throw new TypeError("data must be an object");return function e(n,u){if(!at.isUndefined(n)){if(-1!==c.indexOf(n))throw Error("Circular reference detected in "+u.join("."));c.push(n),at.forEach(n,function(n,r){!0===(!(at.isUndefined(n)||null===n)&&o.call(t,n,at.isString(r)?r.trim():r,u,d))&&e(n,u?u.concat(r):[r])}),c.pop()}}(e),t}function bt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function mt(e,t){this._pairs=[],e&>(e,this,t)}const Et=mt.prototype;function yt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function At(e,t,n){if(!t)return e;const u=n&&n.encode||yt,o=at.isFunction(n)?{serialize:n}:n,r=o&&o.serialize;let i;if(i=r?r(t,o):at.isURLSearchParams(t)?t.toString():new mt(t,o).toString(u),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}Et.append=function(e,t){this._pairs.push([e,t])},Et.toString=function(e){const t=e?function(t){return e.call(this,t,bt)}:bt;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var Ft=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){at.forEach(this.handlers,function(t){null!==t&&e(t)})}},Dt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Ct={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:mt,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const vt="undefined"!=typeof window&&"undefined"!=typeof document,_t="object"==typeof navigator&&navigator||void 0,Bt=vt&&(!_t||["ReactNative","NativeScript","NS"].indexOf(_t.product)<0),wt="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,St=vt&&window.location.href||"http://localhost";var Ot={...Object.freeze({__proto__:null,hasBrowserEnv:vt,hasStandardBrowserWebWorkerEnv:wt,hasStandardBrowserEnv:Bt,navigator:_t,origin:St}),...Ct};function kt(e){function t(e,n,u,o){let r=e[o++];if("__proto__"===r)return!0;const i=Number.isFinite(+r),s=o>=e.length;if(r=!r&&at.isArray(u)?u.length:r,s)return at.hasOwnProp(u,r)?u[r]=[u[r],n]:u[r]=n,!i;u[r]&&at.isObject(u[r])||(u[r]=[]);return t(e,n,u[r],o)&&at.isArray(u[r])&&(u[r]=function(e){const t={},n=Object.keys(e);let u;const o=n.length;let r;for(u=0;u<o;u++)r=n[u],t[r]=e[r];return t}(u[r])),!i}if(at.isFormData(e)&&at.isFunction(e.entries)){const n={};return at.forEachEntry(e,(e,u)=>{t(function(e){return at.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),u,n,0)}),n}return null}const xt={transitional:Dt,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",u=n.indexOf("application/json")>-1,o=at.isObject(e);o&&at.isHTMLForm(e)&&(e=new FormData(e));if(at.isFormData(e))return u?JSON.stringify(kt(e)):e;if(at.isArrayBuffer(e)||at.isBuffer(e)||at.isStream(e)||at.isFile(e)||at.isBlob(e)||at.isReadableStream(e))return e;if(at.isArrayBufferView(e))return e.buffer;if(at.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let r;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return gt(e,new Ot.classes.URLSearchParams,{visitor:function(e,t,n,u){return Ot.isNode&&at.isBuffer(e)?(this.append(t,e.toString("base64")),!1):u.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((r=at.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return gt(r?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||u?(t.setContentType("application/json",!1),function(e,t,n){if(at.isString(e))try{return(t||JSON.parse)(e),at.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||xt.transitional,n=t&&t.forcedJSONParsing,u="json"===this.responseType;if(at.isResponse(e)||at.isReadableStream(e))return e;if(e&&at.isString(e)&&(n&&!this.responseType||u)){const n=!(t&&t.silentJSONParsing)&&u;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n){if("SyntaxError"===e.name)throw ct.from(e,ct.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ot.classes.FormData,Blob:Ot.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};at.forEach(["delete","get","head","post","put","patch"],e=>{xt.headers[e]={}});var Rt=xt;const jt=at.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Pt=Symbol("internals");function Mt(e){return e&&String(e).trim().toLowerCase()}function Nt(e){return!1===e||null==e?e:at.isArray(e)?e.map(Nt):String(e)}function Tt(e,t,n,u,o){return at.isFunction(u)?u.call(this,t,n):(o&&(t=n),at.isString(t)?at.isString(u)?-1!==t.indexOf(u):at.isRegExp(u)?u.test(t):void 0:void 0)}class Lt{constructor(e){e&&this.set(e)}set(e,t,n){const u=this;function o(e,t,n){const o=Mt(t);if(!o)throw new Error("header name must be a non-empty string");const r=at.findKey(u,o);(!r||void 0===u[r]||!0===n||void 0===n&&!1!==u[r])&&(u[r||t]=Nt(e))}const r=(e,t)=>at.forEach(e,(e,n)=>o(e,n,t));if(at.isPlainObject(e)||e instanceof this.constructor)r(e,t);else if(at.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))r((e=>{const t={};let n,u,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),u=e.substring(o+1).trim(),!n||t[n]&&jt[n]||("set-cookie"===n?t[n]?t[n].push(u):t[n]=[u]:t[n]=t[n]?t[n]+", "+u:u)}),t})(e),t);else if(at.isObject(e)&&at.isIterable(e)){let n,u,o={};for(const t of e){if(!at.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[u=t[0]]=(n=o[u])?at.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}r(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=Mt(e)){const n=at.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let u;for(;u=n.exec(e);)t[u[1]]=u[2];return t}(e);if(at.isFunction(t))return t.call(this,e,n);if(at.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Mt(e)){const n=at.findKey(this,e);return!(!n||void 0===this[n]||t&&!Tt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let u=!1;function o(e){if(e=Mt(e)){const o=at.findKey(n,e);!o||t&&!Tt(0,n[o],o,t)||(delete n[o],u=!0)}}return at.isArray(e)?e.forEach(o):o(e),u}clear(e){const t=Object.keys(this);let n=t.length,u=!1;for(;n--;){const o=t[n];e&&!Tt(0,this[o],o,e,!0)||(delete this[o],u=!0)}return u}normalize(e){const t=this,n={};return at.forEach(this,(u,o)=>{const r=at.findKey(n,o);if(r)return t[r]=Nt(u),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=Nt(u),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return at.forEach(this,(n,u)=>{null!=n&&!1!==n&&(t[u]=e&&at.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[Pt]=this[Pt]={accessors:{}}).accessors,n=this.prototype;function u(e){const u=Mt(e);t[u]||(!function(e,t){const n=at.toCamelCase(" "+t);["get","set","has"].forEach(u=>{Object.defineProperty(e,u+n,{value:function(e,n,o){return this[u].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[u]=!0)}return at.isArray(e)?e.forEach(u):u(e),this}}Lt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),at.reduceDescriptors(Lt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),at.freezeMethods(Lt);var It=Lt;function qt(e,t){const n=this||Rt,u=t||n,o=It.from(u.headers);let r=u.data;return at.forEach(e,function(e){r=e.call(n,r,o.normalize(),t?t.status:void 0)}),o.normalize(),r}function zt(e){return!(!e||!e.__CANCEL__)}var Ut=class extends ct{constructor(e,t,n){super(null==e?"canceled":e,ct.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function Ht(e,t,n){const u=n.config.validateStatus;n.status&&u&&!u(n.status)?t(new ct("Request failed with status code "+n.status,[ct.ERR_BAD_REQUEST,ct.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const Vt=(e,t,n=3)=>{let u=0;const o=function(e,t){e=e||10;const n=new Array(e),u=new Array(e);let o,r=0,i=0;return t=void 0!==t?t:1e3,function(s){const a=Date.now(),l=u[i];o||(o=a),n[r]=s,u[r]=a;let c=i,d=0;for(;c!==r;)d+=n[c++],c%=e;if(r=(r+1)%e,r===i&&(i=(i+1)%e),a-o<t)return;const p=l&&a-l;return p?Math.round(1e3*d/p):void 0}}(50,250);return function(e,t){let n,u,o=0,r=1e3/t;const i=(t,r=Date.now())=>{o=r,n=null,u&&(clearTimeout(u),u=null),e(...t)};return[(...e)=>{const t=Date.now(),s=t-o;s>=r?i(e,t):(n=e,u||(u=setTimeout(()=>{u=null,i(n)},r-s)))},()=>n&&i(n)]}(n=>{const r=n.loaded,i=n.lengthComputable?n.total:void 0,s=r-u,a=o(s);u=r;e({loaded:r,total:i,progress:i?r/i:void 0,bytes:s,rate:a||void 0,estimated:a&&i&&r<=i?(i-r)/a:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},Wt=(e,t)=>{const n=null!=e;return[u=>t[0]({lengthComputable:n,total:e,loaded:u}),t[1]]},$t=e=>(...t)=>at.asap(()=>e(...t));var Gt=Ot.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Ot.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Ot.origin),Ot.navigator&&/(msie|trident)/i.test(Ot.navigator.userAgent)):()=>!0,Kt=Ot.hasStandardBrowserEnv?{write(e,t,n,u,o,r,i){if("undefined"==typeof document)return;const s=[`${e}=${encodeURIComponent(t)}`];at.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),at.isString(u)&&s.push(`path=${u}`),at.isString(o)&&s.push(`domain=${o}`),!0===r&&s.push("secure"),at.isString(i)&&s.push(`SameSite=${i}`),document.cookie=s.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function Jt(e,t,n){let u=!("string"==typeof(o=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o));var o;return e&&(u||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Qt=e=>e instanceof It?{...e}:e;function Xt(e,t){t=t||{};const n={};function u(e,t,n,u){return at.isPlainObject(e)&&at.isPlainObject(t)?at.merge.call({caseless:u},e,t):at.isPlainObject(t)?at.merge({},t):at.isArray(t)?t.slice():t}function o(e,t,n,o){return at.isUndefined(t)?at.isUndefined(e)?void 0:u(void 0,e,0,o):u(e,t,0,o)}function r(e,t){if(!at.isUndefined(t))return u(void 0,t)}function i(e,t){return at.isUndefined(t)?at.isUndefined(e)?void 0:u(void 0,e):u(void 0,t)}function s(n,o,r){return r in t?u(n,o):r in e?u(void 0,n):void 0}const a={url:r,method:r,data:r,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(Qt(e),Qt(t),0,!0)};return at.forEach(Object.keys({...e,...t}),function(u){if("__proto__"===u||"constructor"===u||"prototype"===u)return;const r=at.hasOwnProp(a,u)?a[u]:o,i=r(e[u],t[u],u);at.isUndefined(i)&&r!==s||(n[u]=i)}),n}var Zt=e=>{const t=Xt({},e);let{data:n,withXSRFToken:u,xsrfHeaderName:o,xsrfCookieName:r,headers:i,auth:s}=t;if(t.headers=i=It.from(i),t.url=At(Jt(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&i.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):""))),at.isFormData(n))if(Ot.hasStandardBrowserEnv||Ot.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(at.isFunction(n.getHeaders)){const e=n.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&i.set(e,n)})}if(Ot.hasStandardBrowserEnv&&(u&&at.isFunction(u)&&(u=u(t)),u||!1!==u&&Gt(t.url))){const e=o&&r&&Kt.read(r);e&&i.set(o,e)}return t};var Yt="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const u=Zt(e);let o=u.data;const r=It.from(u.headers).normalize();let i,s,a,l,c,{responseType:d,onUploadProgress:p,onDownloadProgress:f}=u;function h(){l&&l(),c&&c(),u.cancelToken&&u.cancelToken.unsubscribe(i),u.signal&&u.signal.removeEventListener("abort",i)}let g=new XMLHttpRequest;function b(){if(!g)return;const u=It.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());Ht(function(e){t(e),h()},function(e){n(e),h()},{data:d&&"text"!==d&&"json"!==d?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:u,config:e,request:g}),g=null}g.open(u.method.toUpperCase(),u.url,!0),g.timeout=u.timeout,"onloadend"in g?g.onloadend=b:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(b)},g.onabort=function(){g&&(n(new ct("Request aborted",ct.ECONNABORTED,e,g)),g=null)},g.onerror=function(t){const u=t&&t.message?t.message:"Network Error",o=new ct(u,ct.ERR_NETWORK,e,g);o.event=t||null,n(o),g=null},g.ontimeout=function(){let t=u.timeout?"timeout of "+u.timeout+"ms exceeded":"timeout exceeded";const o=u.transitional||Dt;u.timeoutErrorMessage&&(t=u.timeoutErrorMessage),n(new ct(t,o.clarifyTimeoutError?ct.ETIMEDOUT:ct.ECONNABORTED,e,g)),g=null},void 0===o&&r.setContentType(null),"setRequestHeader"in g&&at.forEach(r.toJSON(),function(e,t){g.setRequestHeader(t,e)}),at.isUndefined(u.withCredentials)||(g.withCredentials=!!u.withCredentials),d&&"json"!==d&&(g.responseType=u.responseType),f&&([a,c]=Vt(f,!0),g.addEventListener("progress",a)),p&&g.upload&&([s,l]=Vt(p),g.upload.addEventListener("progress",s),g.upload.addEventListener("loadend",l)),(u.cancelToken||u.signal)&&(i=t=>{g&&(n(!t||t.type?new Ut(null,e,g):t),g.abort(),g=null)},u.cancelToken&&u.cancelToken.subscribe(i),u.signal&&(u.signal.aborted?i():u.signal.addEventListener("abort",i)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(u.url);m&&-1===Ot.protocols.indexOf(m)?n(new ct("Unsupported protocol "+m+":",ct.ERR_BAD_REQUEST,e)):g.send(o||null)})};var en=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,u=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;u.abort(t instanceof ct?t:new Ut(t instanceof Error?t.message:t))}};let r=t&&setTimeout(()=>{r=null,o(new ct(`timeout of ${t}ms exceeded`,ct.ETIMEDOUT))},t);const i=()=>{e&&(r&&clearTimeout(r),r=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:s}=u;return s.unsubscribe=()=>at.asap(i),s}};const tn=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let u,o=0;for(;o<n;)u=o+t,yield e.slice(o,u),o=u},nn=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},un=(e,t,n,u)=>{const o=async function*(e,t){for await(const n of nn(e))yield*tn(n,t)}(e,t);let r,i=0,s=e=>{r||(r=!0,u&&u(e))};return new ReadableStream({async pull(e){try{const{done:t,value:u}=await o.next();if(t)return s(),void e.close();let r=u.byteLength;if(n){let e=i+=r;n(e)}e.enqueue(new Uint8Array(u))}catch(e){throw s(e),e}},cancel:e=>(s(e),o.return())},{highWaterMark:2})},{isFunction:on}=at,rn=(({Request:e,Response:t})=>({Request:e,Response:t}))(at.global),{ReadableStream:sn,TextEncoder:an}=at.global,ln=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},cn=e=>{e=at.merge.call({skipUndefined:!0},rn,e);const{fetch:t,Request:n,Response:u}=e,o=t?on(t):"function"==typeof fetch,r=on(n),i=on(u);if(!o)return!1;const s=o&&on(sn),a=o&&("function"==typeof an?(l=new an,e=>l.encode(e)):async e=>new Uint8Array(await new n(e).arrayBuffer()));var l;const c=r&&s&&ln(()=>{let e=!1;const t=new n(Ot.origin,{body:new sn,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),d=i&&s&&ln(()=>at.isReadableStream(new u("").body)),p={stream:d&&(e=>e.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!p[e]&&(p[e]=(t,n)=>{let u=t&&t[e];if(u)return u.call(t);throw new ct(`Response type '${e}' is not supported`,ct.ERR_NOT_SUPPORT,n)})});const f=async(e,t)=>{const u=at.toFiniteNumber(e.getContentLength());return null==u?(async e=>{if(null==e)return 0;if(at.isBlob(e))return e.size;if(at.isSpecCompliantForm(e)){const t=new n(Ot.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return at.isArrayBufferView(e)||at.isArrayBuffer(e)?e.byteLength:(at.isURLSearchParams(e)&&(e+=""),at.isString(e)?(await a(e)).byteLength:void 0)})(t):u};return async e=>{let{url:o,method:i,data:s,signal:a,cancelToken:l,timeout:h,onDownloadProgress:g,onUploadProgress:b,responseType:m,headers:E,withCredentials:y="same-origin",fetchOptions:A}=Zt(e),F=t||fetch;m=m?(m+"").toLowerCase():"text";let D=en([a,l&&l.toAbortSignal()],h),C=null;const v=D&&D.unsubscribe&&(()=>{D.unsubscribe()});let _;try{if(b&&c&&"get"!==i&&"head"!==i&&0!==(_=await f(E,s))){let e,t=new n(o,{method:"POST",body:s,duplex:"half"});if(at.isFormData(s)&&(e=t.headers.get("content-type"))&&E.setContentType(e),t.body){const[e,n]=Wt(_,Vt($t(b)));s=un(t.body,65536,e,n)}}at.isString(y)||(y=y?"include":"omit");const t=r&&"credentials"in n.prototype,a={...A,signal:D,method:i.toUpperCase(),headers:E.normalize().toJSON(),body:s,duplex:"half",credentials:t?y:void 0};C=r&&new n(o,a);let l=await(r?F(C,A):F(o,a));const h=d&&("stream"===m||"response"===m);if(d&&(g||h&&v)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=l[t]});const t=at.toFiniteNumber(l.headers.get("content-length")),[n,o]=g&&Wt(t,Vt($t(g),!0))||[];l=new u(un(l.body,65536,n,()=>{o&&o(),v&&v()}),e)}m=m||"text";let B=await p[at.findKey(p,m)||"text"](l,e);return!h&&v&&v(),await new Promise((t,n)=>{Ht(t,n,{data:B,headers:It.from(l.headers),status:l.status,statusText:l.statusText,config:e,request:C})})}catch(t){if(v&&v(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new ct("Network Error",ct.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t});throw ct.from(t,t&&t.code,e,C,t&&t.response)}}},dn=new Map,pn=e=>{let t=e&&e.env||{};const{fetch:n,Request:u,Response:o}=t,r=[u,o,n];let i,s,a=r.length,l=dn;for(;a--;)i=r[a],s=l.get(i),void 0===s&&l.set(i,s=a?new Map:cn(t)),l=s;return s};pn();const fn={http:null,xhr:Yt,fetch:{get:pn}};at.forEach(fn,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const hn=e=>`- ${e}`,gn=e=>at.isFunction(e)||null===e||!1===e;var bn={getAdapter:function(e,t){e=at.isArray(e)?e:[e];const{length:n}=e;let u,o;const r={};for(let i=0;i<n;i++){let n;if(u=e[i],o=u,!gn(u)&&(o=fn[(n=String(u)).toLowerCase()],void 0===o))throw new ct(`Unknown adapter '${n}'`);if(o&&(at.isFunction(o)||(o=o.get(t))))break;r[n||"#"+i]=o}if(!o){const e=Object.entries(r).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=n?e.length>1?"since :\n"+e.map(hn).join("\n"):" "+hn(e[0]):"as no adapter specified";throw new ct("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return o},adapters:fn};function mn(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ut(null,e)}function En(e){mn(e),e.headers=It.from(e.headers),e.data=qt.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return bn.getAdapter(e.adapter||Rt.adapter,e)(e).then(function(t){return mn(e),t.data=qt.call(e,e.transformResponse,t),t.headers=It.from(t.headers),t},function(t){return zt(t)||(mn(e),t&&t.response&&(t.response.data=qt.call(e,e.transformResponse,t.response),t.response.headers=It.from(t.response.headers))),Promise.reject(t)})}const yn="1.13.5",An={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{An[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const Fn={};An.transitional=function(e,t,n){function u(e,t){return"[Axios v"+yn+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,r)=>{if(!1===e)throw new ct(u(o," has been removed"+(t?" in "+t:"")),ct.ERR_DEPRECATED);return t&&!Fn[o]&&(Fn[o]=!0,console.warn(u(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,r)}},An.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var Dn={assertOptions:function(e,t,n){if("object"!=typeof e)throw new ct("options must be an object",ct.ERR_BAD_OPTION_VALUE);const u=Object.keys(e);let o=u.length;for(;o-- >0;){const r=u[o],i=t[r];if(i){const t=e[r],n=void 0===t||i(t,r,e);if(!0!==n)throw new ct("option "+r+" must be "+n,ct.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new ct("Unknown option "+r,ct.ERR_BAD_OPTION)}},validators:An};const Cn=Dn.validators;class vn{constructor(e){this.defaults=e||{},this.interceptors={request:new Ft,response:new Ft}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Xt(this.defaults,t);const{transitional:n,paramsSerializer:u,headers:o}=t;void 0!==n&&Dn.assertOptions(n,{silentJSONParsing:Cn.transitional(Cn.boolean),forcedJSONParsing:Cn.transitional(Cn.boolean),clarifyTimeoutError:Cn.transitional(Cn.boolean),legacyInterceptorReqResOrdering:Cn.transitional(Cn.boolean)},!1),null!=u&&(at.isFunction(u)?t.paramsSerializer={serialize:u}:Dn.assertOptions(u,{encode:Cn.function,serialize:Cn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Dn.assertOptions(t,{baseUrl:Cn.spelling("baseURL"),withXsrfToken:Cn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let r=o&&at.merge(o.common,o[t.method]);o&&at.forEach(["delete","get","head","post","put","patch","common"],e=>{delete o[e]}),t.headers=It.concat(r,o);const i=[];let s=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;s=s&&e.synchronous;const n=t.transitional||Dt;n&&n.legacyInterceptorReqResOrdering?i.unshift(e.fulfilled,e.rejected):i.push(e.fulfilled,e.rejected)});const a=[];let l;this.interceptors.response.forEach(function(e){a.push(e.fulfilled,e.rejected)});let c,d=0;if(!s){const e=[En.bind(this),void 0];for(e.unshift(...i),e.push(...a),c=e.length,l=Promise.resolve(t);d<c;)l=l.then(e[d++],e[d++]);return l}c=i.length;let p=t;for(;d<c;){const e=i[d++],t=i[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{l=En.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,c=a.length;d<c;)l=l.then(a[d++],a[d++]);return l}getUri(e){return At(Jt((e=Xt(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}at.forEach(["delete","get","head","options"],function(e){vn.prototype[e]=function(t,n){return this.request(Xt(n||{},{method:e,url:t,data:(n||{}).data}))}}),at.forEach(["post","put","patch"],function(e){function t(t){return function(n,u,o){return this.request(Xt(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:u}))}}vn.prototype[e]=t(),vn.prototype[e+"Form"]=t(!0)});var _n=vn;class Bn{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const u=new Promise(e=>{n.subscribe(e),t=e}).then(e);return u.cancel=function(){n.unsubscribe(t)},u},e(function(e,u,o){n.reason||(n.reason=new Ut(e,u,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Bn(function(t){e=t}),cancel:e}}}var wn=Bn;const Sn={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Sn).forEach(([e,t])=>{Sn[t]=e});var On=Sn;const kn=function e(t){const n=new _n(t),u=Ee(_n.prototype.request,n);return at.extend(u,_n.prototype,n,{allOwnKeys:!0}),at.extend(u,n,null,{allOwnKeys:!0}),u.create=function(n){return e(Xt(t,n))},u}(Rt);kn.Axios=_n,kn.CanceledError=Ut,kn.CancelToken=wn,kn.isCancel=zt,kn.VERSION=yn,kn.toFormData=gt,kn.AxiosError=ct,kn.Cancel=kn.CanceledError,kn.all=function(e){return Promise.all(e)},kn.spread=function(e){return function(t){return e.apply(null,t)}},kn.isAxiosError=function(e){return at.isObject(e)&&!0===e.isAxiosError},kn.mergeConfig=Xt,kn.AxiosHeaders=It,kn.formToJSON=e=>kt(at.isHTMLForm(e)?new FormData(e):e),kn.getAdapter=bn.getAdapter,kn.HttpStatusCode=On,kn.default=kn;var xn=kn;function Rn(e,t){return e?Object.keys(e).map(n=>{const u=t||n,o=e[n];return"object"==typeof o?Rn(o,u):`${encodeURIComponent(u)}=${encodeURIComponent(o)}`}).join("&"):""}function jn(e,t){return xn.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+Rn(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)}function Pn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Mn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pn(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Nn(e,t,n,u,o,r,i,s){const a=e?e.trim():null;if(null==a||a.length<1||i&&!i.test(a))return Promise.resolve([]);const l=r||"https://api.digitransit.fi/geocoding/v1/search";let c=Mn(Mn(Mn({text:a},t),u),{},{lang:n});if(o&&(c=Mn(Mn({},c),{},{sources:o})),s){const e=s.toString();c=Mn(Mn({},c),{},{layers:e})}return jn(l,c).then(e=>e.features)}function Tn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Ln(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Tn(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function In(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const u=e.map(e=>{const t="stop"===e.type?"stop":"station";let u=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(u+=`#${e.code}`),n+=`${u},`,Ln(Ln({},e),{},{gid:u})}).reduce(function(e,t){return e[t.gid]=t,e},{});return jn(t,{ids:n.slice(0,-1)}).then(e=>e.features.map(e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:u[e.properties.gid].gid,code:u[e.properties.gid].code,gtfsId:u[e.properties.gid].gtfsId,lastUpdated:u[e.properties.gid].lastUpdated,favouriteId:u[e.properties.gid].favouriteId,address:e.properties.label,layer:fe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))}function qn(e,t,n){let u=me(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(u=u.filter(e=>!n.includes(e.properties.layer))),Promise.resolve(O.default(u,10).map(e=>{const t=Ln(Ln({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t}))}const zn=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],Un=["venue","address","street"],Hn=["carpark","bikepark"],Vn=["stop","station"];const Wn=w.default(function(e,t,n,u,o,r,{input:i},s,a,l){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:f,parkingAreaSources:h,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:E,getFavouriteRoutesQuery:y,getFavouriteRoutes:A,getRoutesQuery:F,context:D,isPeliasLocationAware:C,minimalRegexp:v,lineRegexp:_,URL_PELIAS:B,URL_PELIAS_PLACE:w,feedIDs:k,geocodingSearchParams:x,geocodingSources:R,getFutureRoutes:j,cityBikeNetworks:P}=u,M=!e||0===e.length,N=!t||0===t.length,T=c(D),L=[],I={type:"all",term:i,results:[]},q=g(D),z=C&&null!=l&&l.lat&&null!=l&&l.lon?{"focus.point.lat":l.lat.toFixed(3),"focus.point.lon":l.lon.toFixed(3)}:{},U=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==T.status&&L.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,T)),(M||e.includes("MapPosition"))&&L.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=j(D);L.push(O.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 n=e.getFavouriteVehicleRentalStations(e.context);if((null==n?void 0:n.length)>0)return!0;const u=e.getFavouriteStops(e.context);return(null==u?void 0:u.length)>0}(u)&&L.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)),M||e.includes("Locations")){const n=x;if(t.includes("Favourite")){const e=d(D);L.push(function(e,t){return Promise.resolve(me(e,t,["address","name"]).map(e=>({type:"FavouritePlace",properties:Ln(Ln({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}})))}(e,i)),t.includes("Back")&&L.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(N||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),L.push(Nn(i,n,q,z,R.join(","),B,v,t))}if(N||t.includes("History")){const e=p(D,"endpoint"),t=["bikestation"];t.push(...Vn),t.push(...zn),t.push(...Hn),L.push(qn(e,i,t))}}if(M||e.includes("ParkingAreas")){if(N||t.includes("Datasource")){const e=x;r&&10!==r&&(e.size=r);const t=["carpark","bikepark"],n=h?h.join(","):null;L.push(Nn(i,e,q,z,n,B,v,t).then(e=>o?o(e,U):e))}if(N||t.includes("History")){const e=p(D),t=["bikestation"];t.push(...Vn),t.push(...zn),t.push(...Un),L.push(qn(e,i,t))}}const H=e.includes("Stops"),V=e.includes("Stations");if(M||H||V){if(t.includes("Favourite")){const e=f(D);let t;t=e.every(e=>"station"===e.type)?In(e,w).then(e=>o?o(e,U):e):b(e).then(e=>In(e,w)).then(e=>o?o(e,U):e),L.push(function(e,t,n,u){return e.then(e=>me(e.filter(e=>"stop"===e.type?n:u),t,["properties.name","properties.name","properties.address"]))}(t,i,H,V))}if(N||t.includes("Datasource")){const t=[];H&&t.push("stop"),V&&t.push("station");const n=r&&10!==r?{size:r}:{};x&&x["boundary.country"]&&(n["boundary.country"]=x["boundary.country"]),(M||e.includes("Locations"))&&(n.dedupestops=1);const u=k.map(e=>`gtfs${e}`).join(",");L.push(Nn(i,n,q,z,u,B,v,t).then(e=>o?o(e,U):e))}if(N||t.includes("History")){const e=p(D).filter(e=>!e.properties.gid||e.properties.gid.includes("GTFS:")),t=["bikestation"];t.push(...zn),t.push(...Un),t.push(...Hn),H||t.push("stop"),V||t.push("station"),n?L.push(qn(e,i,t).then(e=>o?o(e,U):e)):L.push(qn(e,i,t))}}if(M||e.includes("Routes")){if(t.includes("Favourite")){const e=A(D);L.push(y(e,i,U,a).then(e=>o?o(e,U,"Routes"):e))}if(L.push(F(i,k,n,a).then(e=>o?o(e,U,"Routes"):e)),N||t.includes("History")){const e=p(D),t=["bikestation"];n&&t.push(...zn.filter(e=>!(e===n))),t.push(...Vn),t.push(...Un),t.push(...Hn),L.push(qn(e,i,t).then(e=>o?o(e,U,"Routes"):e))}}if(M||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=E(D);L.push(m(e,i))}if(N||t.includes("Datasource")){const e=["bikestation"],t=r&&10!==r?{size:r}:{};L.push(Nn(i,t,q,z,P.join(","),B,v,e).then(e=>o?o(e,U,"VehicleRentalStations"):e))}if(N||t.includes("History")){const e=p(D),t=[...Vn];t.push(...zn),t.push(...Un),t.push(...Hn),L.push(qn(e,i,t))}}Promise.all(L).then(S.default).then(e=>{I.results=e}).catch(e=>{I.error=e}).then(()=>{s(Ln(Ln({},I),{},{results:ge(_,I.results,i)}))})},300,{leading:!0}),$n=h.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 Gn(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var u=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&u.firstChild?u.insertBefore(o,u.firstChild):u.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}$n.init();var Kn={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"};Gn("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 Jn=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Qn=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Xn=M.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 n=e.name,u=e.address,[n||u&&u.split(",")[0],"string"==typeof u?u.replace(new RegExp(`${N.default(n)}([ ,]|$)+`),""):""];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(`${N.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],Jn(e)]:[e.name,e.id,Qn(e),Jn(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Jn(e)]}var n,u},(e,t)=>{const n=T.default(e);return n.plain=t,n});const Zn=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},Yn=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,eu=(e,t,n)=>{if(!n)return;if(!e||!e.GTFS.platform)return;const{modes:u,platform:o}=e.GTFS;return[u&&"RAIL"===u[0]?n("track",{lng:t}):n("platform",{lng:t}),o]};function tu(e,t,n){if(!n)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",n("select-from-map",{lng:t})];if("CurrentLocation"===e.type)return["",n("use-own-position",{lng:t})];if("SelectFromOwnLocations"===e.type)return["",n("select-from-own-locations",{lng:t})];let o,[r,i]=Xn(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=n("vehiclerentalstation",{lng:t});return[o,r,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=n("bikepark",{lng:t}),[o,r,void 0,void 0];if("carpark"===e.properties.layer)return o=n("carpark",{lng:t}),[o,r,void 0,void 0];if(e.properties.mode)o=n(e.properties.mode.toLowerCase().replace("favourite",""),{lng:t});else{o=n(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:t})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var u;const s=Qn(e.properties),a=null===(u=e.properties.addendum)||void 0===u?void 0:u.GTFS.modes,l=eu(e.properties.addendum,t,n);return[o,be(r,s),i,s,a,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:n,code:u}=e.properties;return[o,n?be(n.split(",")[0],u):r,i,u,void 0,eu(e.properties.addendum,t)]}return[o,r,i]}const{origin:o,destination:r}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",s=r.locality?`, ${r.locality}`:"",a=o.name,l=r.name;return[n("future-route",{lng:t}),`${n("origin",{lng:t})} ${a}${i} ${n("destination",{lng:t})} ${l}${s}`,e.translatedText]}function nu(e,t,n){if(!n)return;const u=y.DateTime.fromSeconds(Number(e.properties.time)),o=y.DateTime.now();let r=e.properties.arriveBy?n("arrival",{lng:t}):n("departure",{lng:t});return r=u.hasSame(o,"day")?`${r} ${n("today-at")}`:u.hasSame(o.plus({days:1}),"day")?`${r} ${n("tomorrow-at",{lng:t})}`:`${r} ${u.toFormat("ccc d.L.")}`,r=`${r} ${u.toFormat("HH:mm")}`,r}const uu=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=Xn(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),ou=({suggestions:e,t:t,lng:n})=>{let u=[];const o=e[0];return o&&(o.type&&o.type.includes("Favourite")&&u.push(t("favourite",{lng:n})),u=u.concat(tu(e[0],n))),[...new Set(u)].join(" - ")};function ru(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var iu,su={exports:{}};
|
|
2
|
-
/*! For license information please see index.js.LICENSE.txt */var au=(iu||(iu=1,function(e){var t;"undefined"!=typeof self&&self,e.exports=(t=_.default,function(){var e={888:function(e,t,n){var u,o;o=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,u=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},n=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}}),e},u=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),u=n.length,o=-1,r="",i=n.charCodeAt(0);++o<u;){if(0===(t=n.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?n.charAt(o):"\\"+n.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?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},i=function(t,n,u){0===t&&document.body.focus(),u||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},s=function(t,n,u,o){if(n.emitEvents&&"function"==typeof e.CustomEvent){var r=new CustomEvent(t,{bubbles:!0,detail:{anchor:u,toggle:o}});document.dispatchEvent(r)}};return function(a,l){var c,d,p,f,h={cancelScroll:function(e){cancelAnimationFrame(f),f=null,e||s("scrollCancel",c)},animateScroll:function(u,a,l){h.cancelScroll();var d=n(c||t,l||{}),g="[object Number]"===Object.prototype.toString.call(u),b=g||!u.tagName?null:u;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var E,y,A,F=r(p),D=g?u:function(t,n,u,r){var i=0;if(t.offsetParent)do{i+=t.offsetTop,t=t.offsetParent}while(t);return i=Math.max(i-n-u,0),r&&(i=Math.min(i,o()-e.innerHeight)),i}(b,F,parseInt("function"==typeof d.offset?d.offset(u,a):d.offset,10),d.clip),C=D-m,v=o(),_=0,B=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(C,d),w=function(t){E||(E=t),_+=t-E,A=m+C*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,y=(y=0===B?0:_/B)>1?1:y),e.scrollTo(0,Math.floor(A)),function(t,n){var o=e.pageYOffset;if(t==n||o==n||(m<n&&e.innerHeight+o)>=v)return h.cancelScroll(!0),i(u,n,g),s("scrollStop",d,u,a),E=null,f=null,!0}(A,D)||(f=e.requestAnimationFrame(w),E=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(u,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?i(u,Math.floor(D),!1):(s("scrollStart",d,u,a),h.cancelScroll(!0),e.requestAnimationFrame(w))}}},g=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(a))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var n,o;try{n=u(decodeURIComponent(d.hash))}catch(e){n=u(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(n);(o=o||"#top"!==n?o:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),h.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(u(history.state.anchor)))||h.animateScroll(t,null,{updateURL:!1})}};return h.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",b,!1),h.cancelScroll(),c=null,d=null,p=null,f=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.";h.destroy(),c=n(t,l||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),h}}(o)}.apply(t,[]),void 0===u||(e.exports=u)},432:function(e,t,n){var u=this&&this.__createBinding||(Object.create?function(e,t,n,u){void 0===u&&(u=n),Object.defineProperty(e,u,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,u){void 0===u&&(u=n),e[u]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||u(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(47),t),o(n(926),t),o(n(349),t),o(n(137),t),o(n(729),t),o(n(383),t),o(n(450),t),o(n(358),t),o(n(753),t),o(n(869),t),o(n(352),t),o(n(446),t),o(n(164),t),o(n(305),t),o(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var u=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,o=(0,u.useState)(0),r=o[0],i=o[1],s=(0,u.useCallback)(function(e){i(e)},[t]),a=function(e){var u=e.key;if(null==t?void 0:t.length)if("ArrowUp"===u)n&&n(),e.preventDefault(),s(r>0?r-1:t.length-1);else{if("ArrowDown"!==u)return;n&&n(),e.preventDefault(),r<t.length-1?s(r+1):s(0)}};return(0,u.useEffect)(function(){return window.addEventListener("keydown",a),function(){return window.removeEventListener("keydown",a)}}),(0,u.useEffect)(function(){s(0)},[t]),{selectedIndex:r}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var u=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,u.useState)(e),o=n[0],r=n[1];return(0,u.useEffect)(function(){var n=setTimeout(function(){r(e)},t);return function(){clearTimeout(n)}},[e,t]),o}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var u=n(156);t.useElementSize=function(){var e,t,n=(0,u.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var u=n(156);t.useIntersectionObserver=function(e){var t=(0,u.useRef)(null),n=(0,u.useState)(!1),o=n[0],r=n[1],i=function(e){var t=e[0];r(t.isIntersecting)};return(0,u.useEffect)(function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(i,e),u=t.current;return t.current&&n.observe(t.current),function(){u&&n.unobserve(u)}}r(!1)},[t,e]),{containerRef:t,isVisible:o}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var u=n(156),o=n(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,n=(0,u.useState)(null),i=n[0],s=n[1],a=(0,u.useCallback)(function(){s(window.innerWidth)},[]);return(0,u.useEffect)(function(){a()},[]),(0,o.useOnResize)(a),i>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var u=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,u.useState)(t),o=n[0],r=n[1];return(0,u.useEffect)(function(){e||r(t)},[e,t]),e&&o}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var u=n(729);t.useIsMobile=function(){return!(0,u.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var u=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?u.useLayoutEffect:u.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var u=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,o=e.watch;(0,u.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:n()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}},[n,t,o])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var u=n(156);t.useOnResize=function(e){(0,u.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,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var u=n(156);t.useOnWindowFocus=function(e){(0,u.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,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var u=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,u.useEffect)(function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}})}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var u=n(156);t.useRunAfterUpdate=function(){var e=(0,u.useRef)(null);return(0,u.useEffect)(function(){e.current&&(e.current(),e.current=null)}),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var u=n(156);t.useScrollLock=function(){return{lock:(0,u.useCallback)(function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e},[]),unlock:(0,u.useCallback)(function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))},[])}}},358:function(e,t,n){var u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var o=n(156),r=u(n(888));t.useSmoothScroll=function(e){var t=(0,o.useRef)(null),n=e.ref,u=e.offset,i=void 0===u?0:u,s=e.speed,a=void 0===s?500:s;return(0,o.useEffect)(function(){t.current=new r.default(null,{speed:a,speedAsDuration:!0})},[]),(0,o.useCallback)(function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return i},updateURL:!1})},[i,n])}},156:function(e){e.exports=t}},n={};function u(t){var o=n[t];if(void 0!==o)return o.exports;var r=n[t]={exports:{}};return e[t].call(r.exports,r,r.exports,u),r.exports}return u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u(432)}())}(su)),su.exports),lu=ru(au),cu={"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"};Gn("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 du={"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 pu(e,t){if(null==e)return{};var n,u,o=function(e,t){if(null==e)return{};var n={};for(var u in e)if({}.hasOwnProperty.call(e,u)){if(-1!==t.indexOf(u))continue;n[u]=e[u]}return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(u=0;u<r.length;u++)n=r[u],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Gn("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 fu=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],hu=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function gu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function bu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function mu(e){let{item:t,lng:n,getItemProps:o,highlightedIndex:r,itemIndex:i,styles:s}=e,a=pu(e,fu);const[l]=u.useTranslation(),c="FutureRoute"===t.type?bu(bu({},t),{},{translatedText:nu(t,n,l)}):t,d=tu(t,n,l);return _.default.createElement("li",Object.assign({className:B.default(s.suggestion,r===i&&s.suggestionHighlighted)},o({index:i})),_.default.createElement(q.default,Object.assign({item:c,content:d,lng:n},a)))}const Eu="production"!==process.env.NODE_ENV?v.default.shape({name:v.default.string,type:v.default.string,address:v.default.string,selectedIconId:v.default.string,iconColor:v.default.string,translatedText:v.default.string,properties:v.default.shape({layer:v.default.string,color:v.default.string,localadmin:v.default.string,mode:v.default.string,id:v.default.string,source:v.default.string,arrowClicked:v.default.bool,destination:v.default.shape({name:v.default.string,localadmin:v.default.string}),origin:v.default.shape({name:v.default.string,localadmin:v.default.string})})}):{};function yu(e){let{suggestions:t,getMenuProps:n,getItemProps:o,lng:r,styles:i,hidden:s,renderClearHistoryButton:a,handleClearHistory:l}=e,c=pu(e,hu);const[d]=u.useTranslation();return _.default.createElement("div",{className:B.default(i.suggestionsContainerOpen,i.suggestionsContainer,s&&"hidden")},_.default.createElement("ul",Object.assign({className:i.suggestionsList},n()),t.map((e,t)=>_.default.createElement(mu,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))),a&&_.default.createElement("li",o({index:t.length}),_.default.createElement("button",{onClick:l,type:"button",className:i["clear-search-history"]},d("clear-search-history",{lng:r})))))}"production"!==process.env.NODE_ENV&&(mu.propTypes={item:Eu.isRequired,lng:v.default.string.isRequired,getItemProps:v.default.func.isRequired,highlightedIndex:v.default.number.isRequired,itemIndex:v.default.number.isRequired,styles:v.default.objectOf(v.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(yu.propTypes={suggestions:v.default.arrayOf(Eu).isRequired,getMenuProps:v.default.func.isRequired,getItemProps:v.default.func.isRequired,lng:v.default.string.isRequired,styles:v.default.objectOf(v.default.string).isRequired,hidden:v.default.bool.isRequired,renderClearHistoryButton:v.default.bool,handleClearHistory:v.default.func}),yu.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const Au=({color:e,lng:t,clearInput:n,onKeyDown:o,styles:r})=>{const[i]=u.useTranslation();return _.default.createElement("button",{type:"button",className:r["clear-input"],onClick:n,"aria-label":i("clear-button-label",{lng:t}),onKeyDown:o},_.default.createElement(P.default,{img:"close",color:e}))};function Fu({id:e,lng:t,value:n,placeholder:u,required:o,getInputProps:r,getLabelProps:i,clearInput:s,ariaLabel:a,inputRef:l,styles:c,renderLabel:d,isMobile:p,inputClassName:f,transportMode:h,clearButtonColor:g,autoFocus:b,inputOnBlur:m}){return _.default.createElement("div",{className:c.container},d&&_.default.createElement("label",i({className:c["sr-only"],htmlFor:e}),a),_.default.createElement("input",Object.assign({"aria-label":a,autoFocus:b,placeholder:u,required:o,type:"text",className:B.default(c.input,c[e],f,p&&h&&c.thin,n&&c.hasValue),value:n,id:e},r({ref:l,onBlur:m}))),n&&_.default.createElement(Au,{lng:t,clearInput:()=>s(l),styles:c,color:g,onKeyDown:e=>Zn(e)&&s(l)}))}function Du(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Cu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Du(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Du(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Au.propTypes={color:v.default.string.isRequired,lng:v.default.string.isRequired,clearInput:v.default.func.isRequired,onKeyDown:v.default.func.isRequired,styles:v.default.objectOf(v.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(Fu.propTypes={id:v.default.string.isRequired,lng:v.default.string.isRequired,placeholder:v.default.string.isRequired,required:v.default.bool.isRequired,value:v.default.string.isRequired,getInputProps:v.default.func.isRequired,getLabelProps:v.default.func.isRequired,clearInput:v.default.func.isRequired,ariaLabel:v.default.string.isRequired,inputRef:v.default.shape({current:v.default.oneOfType([v.default.string,v.default.object])}).isRequired,styles:v.default.objectOf(v.default.string).isRequired,renderLabel:v.default.bool,isMobile:v.default.bool.isRequired,inputClassName:v.default.string.isRequired,transportMode:v.default.string,clearButtonColor:v.default.string.isRequired,autoFocus:v.default.bool,inputOnBlur:v.default.func}),Fu.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const vu=({appElement:e,id:t,placeholder:o,clearInput:r,onSelectedItemChange:i,fontWeights:s,clearOldSearches:a,suggestionProps:l,lng:c,ariaProps:d,value:f,inputClassName:h,required:g,mobileLabel:b,showScroll:m,state:E,dispatch:y,colors:A})=>{const[F]=u.useTranslation(),{lock:D,unlock:C}=lu.useScrollLock(),v=m?cu:du,B=`${t}-input`,w=`${t}-label`,[S,O]=n.useState(!1),k=_.default.useRef();n.useEffect(()=>{L.default.setAppElement(e)},[]),n.useEffect(()=>{E.renderMobile?D():C()},[E.renderMobile]);const{highlightedIndex:x,getLabelProps:R,getMenuProps:j,getInputProps:M,getItemProps:N,setHighlightedIndex:T}=p.useCombobox({items:E.suggestions,inputValue:f,isOpen:!0,onSelectedItemChange:e=>{i(e),y({type:"TOGGLE_MENU",isMobile:!0})},inputId:B,labelId:w,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e})=>E.renderMobile&&y({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:t,type:n})=>{switch(n){case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return T(-1),y({type:"TOGGLE_MENU",isMobile:!0}),e;case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return E.loading?(y({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?Cu(Cu({},t),{},{selectedItem:E.suggestions[0]}):t;case p.useCombobox.stateChangeTypes.InputBlur:return e;default:return t}},itemToString:e=>e?uu(e):""});R({},{suppressRefError:!0}),j({},{suppressRefError:!0}),M({},{suppressRefError:!0}),N({index:-1},{suppressRefError:!0});const{ariaRequiredText:q,SearchBarId:z,ariaCurrentSuggestion:U}=d,H=q.concat(" ").concat(z).concat(" ").concat(U);return _.default.createElement(L.default,{isOpen:E.renderMobile,className:v["mobile-modal"],overlayClassName:v["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},_.default.createElement("div",{className:v["mobile-modal-content"],style:{"--color":A.primary,"--accessible-primary-color":A.accessiblePrimary,"--hover-color":A.hover,"--font-weight-medium":s.medium}},_.default.createElement("div",{className:v["combobox-container"],htmlFor:B},_.default.createElement("button",{type:"button",className:v["combobox-icon"],onClick:()=>{T(-1),y({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{Zn(e)&&(T(-1),y({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":F("cancel",{lng:c}),tabIndex:0},_.default.createElement(P.default,{img:"arrow",color:A.primary})),_.default.createElement("span",{className:v["right-column"]},_.default.createElement("span",Object.assign({className:v["combobox-label"],id:w},R()),b),_.default.createElement(Fu,{placeholder:Yn(t)?F("address-place-or-business",{lng:c}):o,id:t,lng:c,value:f,getInputProps:M,getLabelProps:R,clearInput:()=>r(k),ariaLabel:H,inputRef:k,styles:v,renderLabel:!1,clearButtonColor:A.primary,autoFocus:!0,inputClassName:h,required:g,isMobile:!0}),_.default.createElement(yu,Object.assign({suggestions:E.suggestions,getMenuProps:j,getItemProps:N,highlightedIndex:x,isOpen:!0,hidden:!1,lng:c,styles:v,renderClearHistoryButton:!0,handleClearHistory:()=>O(!0)},l)))),_.default.createElement(I.default,{appElement:e,isModalOpen:S,handleClose:()=>O(!1),headerText:F("delete-old-searches-header",{lng:c}),primaryButtonText:F("delete",{lng:c}),secondaryButtonText:F("cancel",{lng:c}),primaryButtonOnClick:()=>{a(),O(!1)},secondaryButtonOnClick:()=>O(!1),colors:A,fontWeights:s,lang:c})))};function _u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Bu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_u(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_u(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(vu.propTypes={appElement:v.default.string.isRequired,id:v.default.string.isRequired,clearInput:v.default.func.isRequired,clearOldSearches:v.default.func.isRequired,onSelectedItemChange:v.default.func.isRequired,value:v.default.string.isRequired,colors:v.default.objectOf(v.default.string).isRequired,fontWeights:v.default.shape({medium:v.default.number.isRequired}).isRequired,suggestionProps:v.default.shape({}).isRequired,ariaProps:v.default.shape({ariaRequiredText:v.default.string.isRequired,SearchBarId:v.default.string.isRequired,ariaCurrentSuggestion:v.default.string.isRequired}).isRequired,inputClassName:v.default.string.isRequired,placeholder:v.default.string.isRequired,mobileLabel:v.default.string.isRequired,required:v.default.bool.isRequired,showScroll:v.default.bool.isRequired,lng:v.default.string.isRequired,state:v.default.shape({suggestions:v.default.arrayOf(v.default.shape({})).isRequired,renderMobile:v.default.bool.isRequired,loading:v.default.bool.isRequired}).isRequired,dispatch:v.default.func.isRequired});const wu=(e,t)=>{switch(t.type){case"INPUT_CHANGE":return Bu(Bu({},e),{},{value:t.value});case"FETCH_SUGGESTIONS":return Bu(Bu({},e),{},{loading:t.loading,suggestions:t.suggestions||e.suggestions});case"CLEAR_SUGGESTIONS":return Bu(Bu({},e),{},{suggestions:[]});case"RESET_SOURCES":return Bu(Bu({},e),{},{sources:t.sources});case"SET_SOURCES":return Bu(Bu({},e),{},{showOwnPlaces:t.showOwnPlaces,sources:t.sources,pendingSelection:t.pendingSelection});case"CLEAR":return Bu(Bu({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return Bu(Bu({},e),{},{value:t.value||e.value,isCleared:!t.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return t.initialState;case"PENDING_ENTER":return Bu(Bu({},e),{},{enterPending:t.enterPending});case"TOGGLE_MENU":return t.isMobile?e.renderMobile?Bu(Bu({},e),{},{renderMobile:!1,isCleared:!1}):Bu(Bu({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):Bu(Bu({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:t.isMobile&&!e.renderMobile});default:return e}};function Su(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Ou(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Su(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Su(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const ku=["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 xu({appElement:e,id:t,placeholder:o,onSelect:r,icon:i,value:s,onClear:a,lang:l,getAutoSuggestIcons:c,handleViaPoints:d,focusChange:f,storeRef:h,isMobile:g,mobileLabel:b,inputClassName:m,translatedPlaceholder:E,required:y,ariaLabel:A,fontWeights:F,colors:D,modeSet:C,showScroll:v,isEmbedded:w,transportMode:S,targets:O,sources:k,geocodingSize:x,filterResults:R,searchContext:j,pathOpts:M,refPoint:N}){const[T]=u.useTranslation(),L={suggestions:[],loading:!1,sources:k,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:s,enterPending:!1,isMenuOpen:!1},[I,q]=n.useReducer(wu,L);n.useEffect(()=>q({type:"RESET",initialState:L}),[s]),n.useEffect(()=>q({type:"RESET_SOURCES",sources:k}),[k]);const z=n.useRef(t);n.useEffect(()=>{h&&h(z.current)},[z.current]);const U=n.useCallback(()=>{const e=!(null!=O&&O.length)||O.includes("Locations"),t=(({targets:e,isLocationSearch:t,isMobile:n,ownPlaces:u,sources:o})=>{const r=!(null!=e&&e.length);let i;return u?(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||n||o.length&&!o.includes("Favourite")||i.push("SelectFromOwnLocations")),i})({targets:O,isLocationSearch:e,isMobile:g,ownPlaces:I.showOwnPlaces,sources:I.sources});((e,t,n,u,o,r,i,s,a,l)=>{s(null),Wn(e,t,n,u,o,r,i,s,a,l)})(t,I.sources?I.sources.filter(t=>!e||"Favourite"===!t||I.showOwnPlaces||g):I.sources,S,j,R,x,{input:I.value||""},e=>{if(null==e)return void q({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=Ou({},e);return t.properties.labelId=T(e.properties.labelId,{lng:l}),t}return e});q({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:t})},M,N)},[I.value,I.sources,I.showOwnPlaces,O,S,j,R,x,g,l,M,N,t]),H=n.useCallback((e,n)=>{e&&(d?d(e,n):r(e,t),!f||g&&!w||f(),z.current&&z.current.blur())},[g]),V=e=>H(e.selectedItem,e.highlightedIndex),{isOpen:W,highlightedIndex:$,getLabelProps:G,getMenuProps:K,getInputProps:J,getItemProps:Q,selectItem:X,openMenu:Z,closeMenu:Y}=p.useCombobox({inputId:t,inputValue:I.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e})=>q({type:"INPUT_CHANGE",value:e}),stateReducer:n.useCallback((e,{type:t,changes:n})=>{switch(t){case p.useCombobox.stateChangeTypes.ItemClick:case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return I.loading?(q({type:"PENDING_ENTER",enterPending:!0}),e):n.selectedItem?"SelectFromOwnLocations"===n.selectedItem.type?(q({type:"SET_SOURCES",sources:["Favourite","Back"],showOwnPlaces:!0,pendingSelection:n.selectedItem.type}),e):"back"===n.selectedItem.type?(q({type:"SET_SOURCES",sources:k,showOwnPlaces:!1,pendingSelection:null}),e):n:n;case p.useCombobox.stateChangeTypes.InputClick:return ku.includes(s)?Ou(Ou({},n),{},{inputValue:"",isOpen:!0}):Ou(Ou({},n),{},{isOpen:!0});case p.useCombobox.stateChangeTypes.InputBlur:return n.selectedItem?Ou(Ou({},n),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):n;case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return Ou(Ou({},n),{},{inputValue:""});default:return n}},[I.loading,s,g]),items:I.suggestions,itemToString:e=>e?uu(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!I.renderMobile&&q({type:"TOGGLE_MENU",isMobile:g})}}),ee=e=>{q({type:"CLEAR"}),a&&a(t),e.current&&e.current.focus(),Z()};n.useEffect(()=>{(W||I.renderMobile)&&U(I.value)},[W,I.renderMobile,I.value,U]),n.useEffect(()=>{I.enterPending&&!I.loading&&(H(I.suggestions[0],0),Y())},[I.loading,I.pendingEnter,I.suggestions]);const te={loading:I.loading,isMobile:g,ariaFavouriteString:T("favourite",{lng:l}),fontWeights:F,getAutoSuggestIcons:c,colors:D,modeSet:C},{ariaCurrentSuggestion:ne,ariaRequiredText:ue,SearchBarId:oe,ariaLabelText:re}=(({id:e,ariaLabel:t,lng:n,t:u,isMobile:o,suggestions:r,value:i,required:s})=>{const a=e.replace("searchfield-",""),l=t||u(a,{lng:n}).replace("searchfield-","").concat("."),c=s?`${u("required",{lng:n})}.`:"",d=u(o?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:n}),p="origin"===e?u("search-autosuggest-label-move-to-destination",{lng:n}):"";return{SearchBarId:l,ariaRequiredText:c,ariaLabelText:d.concat(" ").concat(p),ariaSuggestionLen:u("search-autosuggest-len",{count:r.length,lng:n}),ariaCurrentSuggestion:ou({suggestions:r,t:u,lng:n})||i?u("search-current-suggestion",{lng:n,selection:ou({suggestions:r,t:u,lng:n}).toLowerCase()||i}):""}})({id:t,lng:l,t:T,isMobile:g,ariaLabel:A,suggestions:I.suggestions,value:I.value,required:y});return n.useEffect(()=>{I.renderMobile||W||q({type:"RESET",initialState:L})},[I.renderMobile,W]),_.default.createElement(_.default.Fragment,null,g&&_.default.createElement(vu,{placeholder:T(o,{lng:l}),fontWeights:F,clearOldSearches:()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=j;e&&t&&(t(e),n&&n(e),U(I.value))},appElement:e,mobileLabel:b||T(t,{lng:l}),ariaProps:{ariaCurrentSuggestion:ne,SearchBarId:oe,ariaRequiredText:ue},id:t,lng:l,onSelectedItemChange:V,value:I.value,clearInput:ee,suggestionProps:te,showScroll:!!v,colors:D,inputClassName:m,required:y,state:I,dispatch:q}),_.default.createElement("div",{className:B.default(Kn["autosuggest-input-container"],Kn[t],I.renderMobile&&"hidden"),style:{"--color":D.primary,"--hover-color":D.hover}},i&&_.default.createElement("div",{className:B.default(Kn["autosuggest-input-icon"],Kn[t],m&&Kn[`${m}-input-icon`]),"aria-label":ue.concat(" ").concat(oe).concat(" ").concat(T("search-autosuggest-label",{lng:l}))},_.default.createElement(P.default,{img:`${i}`})),_.default.createElement(Fu,{inputClassName:m,ariaLabel:ne.concat(" ").concat(ue).concat(" ").concat(oe).concat(" ").concat(re),id:t,lng:l,getInputProps:J,getLabelProps:G,selectItem:X,value:I.value,clearInput:ee,inputRef:z,styles:Kn,clearButtonColor:D.primary,placeholder:E||T(o,{lng:l}),required:y,transportMode:S,isMobile:g,inputOnBlur:()=>{q({isMobile:g,value:!g&&s,type:"INPUT_BLUR"}),g||q({type:"RESET",initialState:L})}}),_.default.createElement(yu,Object.assign({hidden:!W||g,highlightedIndex:$,getItemProps:Q,getMenuProps:K,suggestions:I.suggestions,lng:l,styles:Kn},te))))}"production"!==process.env.NODE_ENV&&(xu.propTypes={appElement:v.default.string.isRequired,icon:v.default.string,id:v.default.string.isRequired,placeholder:v.default.string.isRequired,translatedPlaceholder:v.default.string,value:v.default.string,transportMode:v.default.string,geocodingSize:v.default.number,filterResults:v.default.func,searchContext:v.default.shape({URL_PELIAS:v.default.string,context:v.default.object,clearOldSearches:v.default.func,clearFutureRoutes:v.default.func}).isRequired,sources:v.default.arrayOf(v.default.string),targets:v.default.arrayOf(v.default.string),ariaLabel:v.default.string,onSelect:v.default.func.isRequired,onClear:v.default.func,storeRef:v.default.func,handleViaPoints:v.default.func,focusChange:v.default.func,lang:v.default.string,isMobile:v.default.bool,pathOpts:v.default.shape({routesPrefix:v.default.string,stopsPrefix:v.default.string}),mobileLabel:v.default.string,refPoint:v.default.shape({address:v.default.string,lat:v.default.number,lon:v.default.number}),inputClassName:v.default.string,fontWeights:v.default.shape({medium:v.default.number}),colors:v.default.objectOf(v.default.string),getAutoSuggestIcons:v.default.objectOf(v.default.func),required:v.default.bool,modeSet:v.default.string,showScroll:v.default.bool,isEmbedded:v.default.bool}),xu.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:f.defaultColors,required:!1,modeSet:void 0,showScroll:!1,refPoint:{}};e.default=e=>_.default.createElement(u.I18nextProvider,{i18n:$n},_.default.createElement(xu,e)),Object.defineProperty(e,"__esModule",{value:!0})});
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUvaW5kZXguanMiLCIuLi9zcmMvdXRpbHMvaTE4bi5qcyIsIi4uL3NyYy91dGlscy90cmFuc2xhdGlvbnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtaW5qZWN0L2Rpc3Qvc3R5bGUtaW5qZWN0LmVzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy91dGlscy91dGlscy5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvU3VnZ2VzdGlvbnMuanMiLCIuLi9zcmMvY29tcG9uZW50cy9DbGVhckJ1dHRvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0lucHV0LmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvTW9iaWxlVmlldy5qcyIsIi4uL3NyYy91dGlscy9zZWFyY2hSZWR1Y2VyLmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiLyoqXG4gKiAgYWNjZXB0IGVxdWFsaXR5IG9mIG5vbiBudWxsaXNoIHZhbHVlc1xuICpcbiAqIEBuYW1lIHRydUVxXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gdmFsMSBGaXJzdCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHBhcmFtMiBTZWNvbmQgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC50cnVFcSgnMicsICcyJyk7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRydUVxKHZhbDEsIHZhbDIpIHtcbiAgcmV0dXJuIHZhbDEgJiYgdmFsMiAmJiB2YWwxID09PSB2YWwyO1xufVxuIiwiaW1wb3J0IHRydUVxIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC10cnUtZXEnO1xuLyoqXG4gKiBDaGVja3MgdGhhdCBpcyBpdGVtcyBkdXBsaWNhdGVcbiAqXG4gKiBAbmFtZSBpc0R1cGxpY2F0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0xIE9iamVjdCBjb250YWluaW5nIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICoge1xuICogIHByb3BlcnRpZXMge1xuICogICAgICBndGZzSWQ6IFN0cmluZ1xuICogICAgICBnaWQ6IFN0cmluZyBmcm9tIGdlb2NvZGVyXG4gKiAgICAgIG5hbWU6IFN0cmluZ1xuICogICAgICBsYWJlbDogU3RyaW5nXG4gKiAgICAgICBhZGRyZXNzOiBTdHJpbmdcbiAqICAgICAgZ2VvbWV0cnkge1xuICogICAgICAgICBjb29yZGluYXRlcyBbTnVtYmVyIGxhdCwgTnVtYmVyIGxvbl1cbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMiBPYmplY3Qgd2l0aCBzYW1lIGF0dHJpYnV0ZXMgYXMgaXRlbTFcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5pc0R1cGxpY2F0ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cblxuY29uc3QgZ3Rmc1N0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbicsICdmYXZvdXJpdGVTdG9wJywgJ2Zhdm91cml0ZVN0YXRpb24nXTtcbmNvbnN0IHZlaGljbGVSZW50YWxMYXllcnMgPSBbJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJywgJ2Jpa2VzdGF0aW9uJ107XG5cbmZ1bmN0aW9uIGxhYmVsSWRUb0dpZChpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoJzonKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYGNpdHliaWtlcyR7cGFydHNbMF19OmJpa2VzdGF0aW9uOiR7cGFydHNbMV19YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsYWRtaW59Ly8ke2QxLm5hbWV9Ly8ke2QxLmxvY2FsYWRtaW59YDtcbiAgICBjb25zdCBuYW1lMiA9IGAke28yLm5hbWV9Ly8ke28yLmxvY2FsYWRtaW59Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsYWRtaW59YDtcblxuICAgIHJldHVybiBuYW1lMSA9PT0gbmFtZTI7XG4gIH1cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgdmVoaWNsZVJlbnRhbExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgdmVoaWNsZVJlbnRhbExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpXG4gICkge1xuICAgIGNvbnN0IGlkMSA9IHByb3BzMS5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMS5sYWJlbElkKTtcbiAgICBjb25zdCBpZDIgPSBwcm9wczIuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczIubGFiZWxJZCk7XG4gICAgcmV0dXJuIGlkMSA9PT0gaWQyO1xuICB9XG4gIGlmIChwcm9wczEuZ3Rmc0lkICYmIHByb3BzMi5ndGZzSWQpIHtcbiAgICByZXR1cm4gcHJvcHMxLmd0ZnNJZCA9PT0gcHJvcHMyLmd0ZnNJZDtcbiAgfVxuICBpZiAoXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcikgJiZcbiAgICBwcm9wczEuZ2lkICYmXG4gICAgcHJvcHMyLmdpZFxuICApIHtcbiAgICByZXR1cm4gcHJvcHMxLmdpZCA9PT0gcHJvcHMyLmdpZDtcbiAgfVxuXG4gIGNvbnN0IHAxID0gaXRlbTEgJiYgaXRlbTEuZ2VvbWV0cnkgPyBpdGVtMS5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcDIgPSBpdGVtMiAmJiBpdGVtMi5nZW9tZXRyeSA/IGl0ZW0yLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuXG4gIGlmIChwMSAmJiBwMikge1xuICAgIC8vIGJvdGggaGF2ZSBnZW9tZXRyeVxuICAgIGlmIChNYXRoLmFicyhwMVswXSAtIHAyWzBdKSA8IDFlLTYgJiYgTWF0aC5hYnMocDFbMV0gLSBwMlsxXSkgPCAxZS02KSB7XG4gICAgICAvLyBsb2NhdGlvbiBtYXRjaCBpcyBub3QgZW5vdWdoLiBSZXF1aXJlIGEgY29tbW9uIHByb3BlcnR5XG4gICAgICBpZiAoXG4gICAgICAgIHRydUVxKHByb3BzMS5uYW1lLCBwcm9wczIubmFtZSkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmxhYmVsLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIuYWRkcmVzcykgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmxhYmVsLCBwcm9wczIuYWRkcmVzcylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IGlzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gvb3JkZXJCeSc7XG5pbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0R1cGxpY2F0ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlJztcblxuY29uc3Qgbm9ybWFsaXplID0gc3RyID0+IHtcbiAgaWYgKCFpc1N0cmluZyhzdHIpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbn07XG5cbmNvbnN0IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKFxccHtMfSspL3UpO1xufTtcblxuY29uc3QgdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzID0gc3RyID0+IHtcbiAgcmV0dXJuIC9eWzAtOV0rXFxwe0x9KyQvdS50ZXN0KHN0cik7XG59O1xuXG4vKipcbiAqIExheWVyVHlwZSBkZXBpY3RzIHRoZSB0eXBlIG9mIHRoZSBwb2ludC1vZi1pbnRlcmVzdC5cbiAqL1xuY29uc3QgTGF5ZXJUeXBlID0ge1xuICBBZGRyZXNzOiAnYWRkcmVzcycsXG4gIEJhY2s6ICdiYWNrJyxcbiAgQ3VycmVudFBvc2l0aW9uOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgRmF2b3VyaXRlU3RvcDogJ2Zhdm91cml0ZVN0b3AnLFxuICBGYXZvdXJpdGVTdGF0aW9uOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gIEZhdm91cml0ZVBsYWNlOiAnZmF2b3VyaXRlUGxhY2UnLFxuICBGYXZvdXJpdGVSb3V0ZTogJ2Zhdm91cml0ZVJvdXRlJyxcbiAgRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246ICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIFZlaGljbGVSZW50YWxTdGF0aW9uOiAnYmlrZXN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICBpdGVtLmd0ZnNJZCxcbiAgKX0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0IChtaW46IDAsIG1heDogMS41KS4gVGhlIGJlc3QgbWF0Y2ggd2lsbCByZXR1cm4gYSBudW1iZXIgb2YgMS41LlxuICogV29yc2UgbWF0Y2hlcyB3aWxsIHJldHVybiAwIG9yIDAuNS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHtcbiAgICAgIHJldHVybiB7IG5hbWUsIHZhbHVlOiByZXN1bHRQcm9wZXJ0aWVzW25hbWVdIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKGVsZW1lbnQgPT4gaXNTdHJpbmcoZWxlbWVudC52YWx1ZSkgJiYgZWxlbWVudC52YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAoZWxlbWVudCA9PiB7XG4gICAgICBsZXQgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKGVsZW1lbnQudmFsdWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZWxlbWVudC5uYW1lID09PSAnc2hvcnROYW1lJyAmJlxuICAgICAgICAgIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhub3JtYWxpemVkVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIHRoZSBzaG9ydE5hbWUgaXMgb2YgYSBjZXJ0YWluIGZvcm1hdCAoZS5nLiA4OUEpLCBpdCBpcyB0cmVhdGVkIGhlcmVcbiAgICAgICAgICAvLyBhcyBpZiBpdCBoYWQgdGhlIGxlbmd0aCBvZiB0aGUgbnVtYmVycyB3aXRoIHRoZSBsZXR0ZXJzIHJlbW92ZWQuXG4gICAgICAgICAgLy8gU28gdGhlIGxlbmd0aCBvZiA4OUEgd291bGQgYmUgdHJlYXRlZCBhcyAyLlxuICAgICAgICAgIFtub3JtYWxpemVkVmFsdWVdID0gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmdWxsIG1hdGNoIGF0IHN0YXJ0LiBSZXR1cm4gbWF4IHJlc3VsdCB3aGVuIG1hdGNoIGlzIGZ1bGwsIG5vdCBvbmx5IHBhcnRpYWxcbiAgICAgICAgcmV0dXJuIDAuNSArIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCAvIG5vcm1hbGl6ZWRWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBiZWNhdXNlIG9mIGZpbHRlcm1hdGNoaW5ndG9pbnB1dCwgd2Uga25vdyB0aGF0IG1hdGNoIG9jY3VycmVkIHNvbWV3aGVyZVxuICAgICAgLy8gZG9uJ3QgcnVuIGZpbHRlcm1hdGNoaW5nIGFnYWluIGJ1dCBlc3RpbWF0ZSByb3VnaGx5OlxuICAgICAgLy8gdGhlIGxvbmdlciB0aGUgbWF0Y2hpbmcgc3RyaW5nLCB0aGUgYmV0dGVyIGNvbmZpZGVuY2UsIG1heCBiZWluZyAwLjVcbiAgICAgIHJldHVybiAoMC41ICogbm9ybWFsaXplZFRlcm0ubGVuZ3RoKSAvIChub3JtYWxpemVkVGVybS5sZW5ndGggKyAxKTtcbiAgICB9KVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+IChjdXJyZW50ID4gcHJldmlvdXMgPyBjdXJyZW50IDogcHJldmlvdXMpLFxuICAgICAgMCxcbiAgICApO1xufTtcblxuLyoqXG4gKiBSYW5rcyB0aGUgcmVzdWx0IGJhc2VkIG9uIGl0cyBsYXllciBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIgdGhlIGxheWVyIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSB0aGUgc291cmNlIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJSYW5rID0gKGxheWVyLCBzb3VyY2UpID0+IHtcbiAgc3dpdGNoIChsYXllcikge1xuICAgIGNhc2UgTGF5ZXJUeXBlLkN1cnJlbnRQb3NpdGlvbjpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJhY2s6XG4gICAgICByZXR1cm4gMC45O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21NYXA6XG4gICAgICByZXR1cm4gMC44O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6XG4gICAgICByZXR1cm4gMC43OTtcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdGF0aW9uOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVBsYWNlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0b3A6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUm91dGU6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC40NTtcbiAgICBjYXNlIExheWVyVHlwZS5GdXR1cmVSb3V0ZTpcbiAgICAgIHJldHVybiAwLjQ0O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgIGlmIChpc1N0cmluZyhzb3VyY2UpICYmIHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDAuNDM7XG4gICAgICB9XG4gICAgICByZXR1cm4gMC40MjtcbiAgICB9XG4gICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgcmV0dXJuIDAuMzY7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHZlbnVlLCBhZGRyZXNzLCBzdHJlZXQsIHJvdXRlLXh4eFxuICAgICAgcmV0dXJuIDAuNDE7XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHNvcnQgdGhlIHJlc3VsdHMuIE9yZGVycyBhcyBmb2xsb3dzOlxuICogIC0gY3VycmVudCBwb3NpdGlvbiBmaXJzdCBmb3IgYW4gZW1wdHkgc2VhcmNoXG4gKiAgLSBtYXRjaGluZyByb3V0ZXMgZmlyc3RcbiAqICAtIG90aGVyd2lzZSBieSBjb25maWRlbmNlLCBleGNlcHQgdGhhdDpcbiAqICAgIC0gYm9vc3Qgd2VsbCBtYXRjaGluZyBzdGF0aW9ucyAoZXNwZWNpYWxseSBmcm9tIEdURlMpXG4gKiAgICAtIHJhbmsgc3RvcHMgbG93ZXIgYXMgdGhleSB0ZW5kIHRvIG9jY3VweSBtb3N0IG9mIHRoZSBzZWFyY2ggcmVzdWx0c1xuICogIC0gaXRlbXMgd2l0aCBubyBjb25maWRlbmNlIChvbGQgc2VhcmNoZXMgYW5kIGZhdm9yaXRlcyk6XG4gKiAgICAtIHJhbmsgZmF2b3VyaXRlcyBiZXR0ZXIgdGhhbiBvcmRpbmFyeSBvbGQgc2VhcmNoZXNcbiAqICAgIC0gcmFuayBmdWxsIG1hdGNoIGJldHRlciB0aGFuIHBhcnRpYWwgbWF0Y2hcbiAqICAgIC0gcmFuayBtYXRjaCBhdCBtaWRkbGUgd29yZCBsb3dlciB0aGFuIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqICAgIC0gcmFuayBiaWtlIHJlbnRhbCBzdGF0aW9ucyBsb3dlclxuICogQHBhcmFtIHsqW119IHJlc3VsdHMgVGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2VyZSByZWNlaXZlZFxuICogQHBhcmFtIHtTdHJpbmd9IHRlcm0gVGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRTZWFyY2hSZXN1bHRzID0gKGxpbmVSZWdleHAsIHJlc3VsdHMsIHRlcm0gPSAnJykgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0cykgfHwgIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3QgaXNMaW5lSWRlbnRpZmllciA9IHZhbHVlID0+XG4gICAgaXNTdHJpbmcodmFsdWUpICYmIGxpbmVSZWdleHAgJiYgbGluZVJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICBjb25zdCBub3JtYWxpemVkVGVybSA9IG5vcm1hbGl6ZSh0ZXJtKTtcbiAgY29uc3QgaXNMaW5lU2VhcmNoID0gaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemVkVGVybSk7XG5cbiAgY29uc3Qgb3JkZXJlZFJlc3VsdHMgPSBvcmRlckJ5KFxuICAgIHJlc3VsdHMuZmlsdGVyKHIgPT4gciksXG4gICAgW1xuICAgICAgLy8gcmFuayBtYXRjaGluZyByb3V0ZXMgYmVzdFxuICAgICAgcmVzdWx0ID0+XG4gICAgICAgIGlzTGluZVNlYXJjaCAmJlxuICAgICAgICBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpKSAmJlxuICAgICAgICBub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWRlbmNlLCBsYXllciwgc291cmNlIH0gPSByZXN1bHQucHJvcGVydGllcztcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIERvaW5nIHNlYXJjaCB3aXRoIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICAvLyBObyBjb25maWRlbmNlIHRvIG1hdGNoLCBzbyB1c2UgcmFua2VkIG9sZCBzZWFyY2hlcyBhbmQgZmF2b3VyaXRlc1xuICAgICAgICAgIHJldHVybiBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtdXN0IGhhbmRsZSBhIG1peHVwIG9mIGdlb2NvZGVyIHNlYXJjaGVzIGFuZCBpdGVtcyBhYm92ZVxuICAgICAgICAvLyBOb3JtYWwgY29uZmlkZW5jZSByYW5nZSBmcm9tIGdlb2NvZGVyIGlzIGFib3V0IDAuMyAuLiAxXG4gICAgICAgIGlmICghY29uZmlkZW5jZSkge1xuICAgICAgICAgIC8vIG5vdCBmcm9tIGdlb2NvZGVyLCBlc3RpbWF0ZSBjb25maWRlbmNlIG91cnNlbHZlc1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VvY29kZWQgaXRlbXMgd2l0aCBjb25maWRlbmNlLCBqdXN0IGFkanVzdCBhIGxpdHRsZVxuICAgICAgICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgICAgICAgY29uc3QgYm9vc3QgPSBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwID8gMC4wMiA6IDAuMDE7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSArIGJvb3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMoXG4gICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpWzBdXG4gICAgICAgICAgICA6IHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKFxuICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lLFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKVsxXVxuICAgICAgICAgICAgOiByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYycsICdhc2MnLCAnYXNjJywgJ2FzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgZmlsdGVycyBsaXN0IG1hdGNoaW5nIHRvIGlucHV0LlxuICpcbiAqIEBuYW1lIGZpbHRlck1hdGNoaW5nVG9JbnB1dFxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBMaXN0IGNvbnRhaW5pbiBvYmplY3RzIGUuZyggIHtcbiAqICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnXG4gKiAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAqICAgICAgICAgICBsYWJlbDogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgICAgbGF5ZXI6ICdhZGRyZXNzJyxcbiAqICAgICAgICAgICBuYW1lOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgZ2VvbWV0cnk6IHsgY29vcmRpbmF0ZXM6IFtsb24sIGxhdF0gfSxcbiAqICAgICAgIH0sKVxuICogQHBhcmFtIHtTdHJpbmd9IElucHV0IElucHV0IGdpdmVuIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3RcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBMaXN0IG9mIGZpZWxkcyB0aGF0IGxpc3QgaXMgZmlsdGVyZWQgYnkgZS5nIChbcHJvcGVydGllcy5sYWJlbCwgcHJvcGVydGllcy5uYW1lXSlcbiAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgQXJyYXkuXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5maWx0ZXJNYXRjaGluZ1RvSW5wdXQoW3t0eXBlOiBmZWF0dXJlLCBwcm9wZXJ0aWVzIHsgLi4uIG5hbWU6IHRlc3RhZGRyZXNzNCB9IC4uLiB9XSwgJ3Rlc3RhZGRyZXNzNCcsICdwcm9wZXJ0aWVzLm5hbWUnKTtcbiAqIC8vPSBMaXN0IGNvbnRhaW5pbmcgb2JqZWN0IHdpdGggZ2l2ZW4gbmFtZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGxpc3QsIElucHV0LCBmaWVsZHMpIHtcbiAgaWYgKHR5cGVvZiBJbnB1dCA9PT0gJ3N0cmluZycgJiYgSW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0ID0gSW5wdXQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlXb3JkID0gaW5wdXQuaW5jbHVkZXMoJyAnKSB8fCBpbnB1dC5pbmNsdWRlcygnLCcpO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgICAgZmllbGRzLmZvckVhY2gocE5hbWUgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQoaXRlbSwgcE5hbWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbXVsdGlXb3JkICYmXG4gICAgICAgICAgKHBOYW1lID09PSAncHJvcGVydGllcy5sYWJlbCcgfHwgcE5hbWUgPT09ICdhZGRyZXNzJykgJiZcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRyb3AgbGFzdCBwYXJ0cyBpLmUuIGNpdHkgYW5kIG5laWdoYm91cmhvb2RcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG11bHRpV29yZCkge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywvZywgJyAnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZihpbnB1dCkgPT09IDApIHtcbiAgICAgICAgICAvLyBhY2NlcHQgbWF0Y2ggb25seSBhdCB3b3JkIHN0YXJ0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGJvdW5kIHZlcnNpb24gb2YgYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmluZFxuICogQHBhcmFtIHsqfSB0aGlzQXJnIC0gVGhlIHZhbHVlIHRvIGJlIHBhc3NlZCBhcyB0aGUgYHRoaXNgIHBhcmFtZXRlclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJpbmQgZnJvbSBcIi4vaGVscGVycy9iaW5kLmpzXCI7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHsgdG9TdHJpbmcgfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7IGdldFByb3RvdHlwZU9mIH0gPSBPYmplY3Q7XG5jb25zdCB7IGl0ZXJhdG9yLCB0b1N0cmluZ1RhZyB9ID0gU3ltYm9sO1xuXG5jb25zdCBraW5kT2YgPSAoKGNhY2hlKSA9PiAodGhpbmcpID0+IHtcbiAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTtcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSAodHlwZSkgPT4gKHRoaW5nKSA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7IGlzQXJyYXkgfSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdChcInVuZGVmaW5lZFwiKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIChcbiAgICB2YWwgIT09IG51bGwgJiZcbiAgICAhaXNVbmRlZmluZWQodmFsKSAmJlxuICAgIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJlxuICAgICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpICYmXG4gICAgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmXG4gICAgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbClcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdChcIkFycmF5QnVmZmVyXCIpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdmFsICYmIHZhbC5idWZmZXIgJiYgaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdChcInN0cmluZ1wiKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdChcImZ1bmN0aW9uXCIpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdChcIm51bWJlclwiKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gXCJvYmplY3RcIjtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSAodGhpbmcpID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKFxuICAgIChwcm90b3R5cGUgPT09IG51bGwgfHxcbiAgICAgIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmXG4gICAgISh0b1N0cmluZ1RhZyBpbiB2YWwpICYmXG4gICAgIShpdGVyYXRvciBpbiB2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIGVtcHR5IG9iamVjdCAoc2FmZWx5IGhhbmRsZXMgQnVmZmVycylcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIGVtcHR5IG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRW1wdHlPYmplY3QgPSAodmFsKSA9PiB7XG4gIC8vIEVhcmx5IHJldHVybiBmb3Igbm9uLW9iamVjdHMgb3IgQnVmZmVycyB0byBwcmV2ZW50IFJhbmdlRXJyb3JcbiAgaWYgKCFpc09iamVjdCh2YWwpIHx8IGlzQnVmZmVyKHZhbCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCkgPT09IE9iamVjdC5wcm90b3R5cGVcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRmFsbGJhY2sgZm9yIGFueSBvdGhlciBvYmplY3RzIHRoYXQgbWlnaHQgY2F1c2UgUmFuZ2VFcnJvciB3aXRoIE9iamVjdC5rZXlzKClcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KFwiRGF0ZVwiKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoXCJGaWxlXCIpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdChcIkJsb2JcIik7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoXCJGaWxlTGlzdFwiKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiAoXG4gICAgdGhpbmcgJiZcbiAgICAoKHR5cGVvZiBGb3JtRGF0YSA9PT0gXCJmdW5jdGlvblwiICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8XG4gICAgICAoaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmXG4gICAgICAgICgoa2luZCA9IGtpbmRPZih0aGluZykpID09PSBcImZvcm1kYXRhXCIgfHxcbiAgICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgICAgKGtpbmQgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmXG4gICAgICAgICAgICB0aGluZy50b1N0cmluZygpID09PSBcIltvYmplY3QgRm9ybURhdGFdXCIpKSkpXG4gICk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KFwiVVJMU2VhcmNoUGFyYW1zXCIpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gW1xuICBcIlJlYWRhYmxlU3RyZWFtXCIsXG4gIFwiUmVxdWVzdFwiLFxuICBcIlJlc3BvbnNlXCIsXG4gIFwiSGVhZGVyc1wiLFxuXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PlxuICBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIFwiXCIpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheTx1bmtub3duPn0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5hbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHsgYWxsT3duS2V5cyA9IGZhbHNlIH0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEJ1ZmZlciBjaGVja1xuICAgIGlmIChpc0J1ZmZlcihvYmopKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXNcbiAgICAgID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKVxuICAgICAgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAgaWYgKGlzQnVmZmVyKG9iaikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyBzZWxmXG4gICAgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICA/IHdpbmRvd1xuICAgICAgOiBnbG9iYWw7XG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+XG4gICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3QgeyBjYXNlbGVzcywgc2tpcFVuZGVmaW5lZCB9ID0gKGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcykgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIC8vIFNraXAgZGFuZ2Vyb3VzIHByb3BlcnR5IG5hbWVzIHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgIGlmIChrZXkgPT09IFwiX19wcm90b19fXCIgfHwga2V5ID09PSBcImNvbnN0cnVjdG9yXCIgfHwga2V5ID09PSBcInByb3RvdHlwZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gKGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpKSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2UgaWYgKCFza2lwVW5kZWZpbmVkIHx8ICFpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHsgYWxsT3duS2V5cyB9ID0ge30pID0+IHtcbiAgZm9yRWFjaChcbiAgICBiLFxuICAgICh2YWwsIGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBrZXksIHtcbiAgICAgICAgICB2YWx1ZTogYmluZCh2YWwsIHRoaXNBcmcpLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBrZXksIHtcbiAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsT3duS2V5cyB9LFxuICApO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhmZWZmKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoXG4gICAgc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG4gICAgZGVzY3JpcHRvcnMsXG4gICk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBjb25zdHJ1Y3RvcixcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsIFwic3VwZXJcIiwge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSxcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiZcbiAgICAgICAgIW1lcmdlZFtwcm9wXVxuICAgICAgKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoXG4gICAgc291cmNlT2JqICYmXG4gICAgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmXG4gICAgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlXG4gICk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoKFR5cGVkQXJyYXkpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh0aGluZykgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW2l0ZXJhdG9yXTtcblxuICBjb25zdCBfaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBfaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoXCJIVE1MRm9ybUVsZW1lbnRcIik7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gKHN0cikgPT4ge1xuICByZXR1cm4gc3RyXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZywgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH0pO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoXG4gICh7IGhhc093blByb3BlcnR5IH0pID0+XG4gIChvYmosIHByb3ApID0+XG4gICAgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApXG4pKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KFwiUmVnRXhwXCIpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoXG4gICAgICBpc0Z1bmN0aW9uKG9iaikgJiZcbiAgICAgIFtcImFyZ3VtZW50c1wiLCBcImNhbGxlclwiLCBcImNhbGxlZVwiXS5pbmRleE9mKG5hbWUpICE9PSAtMVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoXCJ3cml0YWJsZVwiIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnXCIgKyBuYW1lICsgXCInXCIpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZylcbiAgICA/IGRlZmluZShhcnJheU9yU3RyaW5nKVxuICAgIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSgodmFsdWUgPSArdmFsdWUpKVxuICAgID8gdmFsdWVcbiAgICA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhIShcbiAgICB0aGluZyAmJlxuICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJlxuICAgIHRoaW5nW3RvU3RyaW5nVGFnXSA9PT0gXCJGb3JtRGF0YVwiICYmXG4gICAgdGhpbmdbaXRlcmF0b3JdXG4gICk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvL0J1ZmZlciBjaGVja1xuICAgICAgaWYgKGlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoXCJ0b0pTT05cIiBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufTtcblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdChcIkFzeW5jRnVuY3Rpb25cIik7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmXG4gIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmXG4gIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiZcbiAgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWRcbiAgICA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgICAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgXCJtZXNzYWdlXCIsXG4gICAgICAgICAgKHsgc291cmNlLCBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKVxuICAgIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIiwgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKSk7XG5cbmNvbnN0IGFzYXAgPVxuICB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbClcbiAgICA6ICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLm5leHRUaWNrKSB8fCBfc2V0SW1tZWRpYXRlO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuY29uc3QgaXNJdGVyYWJsZSA9ICh0aGluZykgPT4gdGhpbmcgIT0gbnVsbCAmJiBpc0Z1bmN0aW9uKHRoaW5nW2l0ZXJhdG9yXSk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzRW1wdHlPYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwLFxuICBpc0l0ZXJhYmxlLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY2xhc3MgQXhpb3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBzdGF0aWMgZnJvbShlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpIHtcbiAgICAgICAgY29uc3QgYXhpb3NFcnJvciA9IG5ldyBBeGlvc0Vycm9yKGVycm9yLm1lc3NhZ2UsIGNvZGUgfHwgZXJyb3IuY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgICAgIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcbiAgICAgICAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcbiAgICAgICAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG4gICAgICAgIHJldHVybiBheGlvc0Vycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgICAgICAgdGhpcy5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuICAgICAgICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgICAgICAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gICAgICAgIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gU3RhbmRhcmRcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgICAgICAgLy8gTW96aWxsYVxuICAgICAgICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICAgICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAgICAgICAvLyBBeGlvc1xuICAgICAgICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8vIFRoaXMgY2FuIGJlIGNoYW5nZWQgdG8gc3RhdGljIHByb3BlcnRpZXMgYXMgc29vbiBhcyB0aGUgcGFyc2VyIG9wdGlvbnMgaW4gLmVzbGludC5janMgYXJlIHVwZGF0ZWQuXG5BeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFID0gJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJztcbkF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04gPSAnRVJSX0JBRF9PUFRJT04nO1xuQXhpb3NFcnJvci5FQ09OTkFCT1JURUQgPSAnRUNPTk5BQk9SVEVEJztcbkF4aW9zRXJyb3IuRVRJTUVET1VUID0gJ0VUSU1FRE9VVCc7XG5BeGlvc0Vycm9yLkVSUl9ORVRXT1JLID0gJ0VSUl9ORVRXT1JLJztcbkF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyA9ICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJztcbkF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURUQgPSAnRVJSX0RFUFJFQ0FURUQnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFID0gJ0VSUl9CQURfUkVTUE9OU0UnO1xuQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QgPSAnRVJSX0JBRF9SRVFVRVNUJztcbkF4aW9zRXJyb3IuRVJSX0NBTkNFTEVEID0gJ0VSUl9DQU5DRUxFRCc7XG5BeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCA9ICdFUlJfTk9UX1NVUFBPUlQnO1xuQXhpb3NFcnJvci5FUlJfSU5WQUxJRF9VUkwgPSAnRVJSX0lOVkFMSURfVVJMJztcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoUGxhdGZvcm1Gb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/KG9iamVjdHxGdW5jdGlvbil9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3QgX29wdGlvbnMgPSB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpID8ge1xuICAgIHNlcmlhbGl6ZTogb3B0aW9uc1xuICB9IDogb3B0aW9ucztcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IF9vcHRpb25zICYmIF9vcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBfb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgX29wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBpbnRlcmNlcHRvciwgc3luY2hyb25vdXMgYW5kIHJ1bldoZW5cbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZSxcbiAgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzogdHJ1ZVxufTtcbiIsImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luXG59XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhLCB0aGlzLnBhcnNlUmV2aXZlcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwYXJzZUhlYWRlcnMgZnJvbSAnLi4vaGVscGVycy9wYXJzZUhlYWRlcnMuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSBpZih1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoaGVhZGVyKSAmJiB1dGlscy5pc0l0ZXJhYmxlKGhlYWRlcikpIHtcbiAgICAgIGxldCBvYmogPSB7fSwgZGVzdCwga2V5O1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBoZWFkZXIpIHtcbiAgICAgICAgaWYgKCF1dGlscy5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignT2JqZWN0IGl0ZXJhdG9yIG11c3QgcmV0dXJuIGEga2V5LXZhbHVlIHBhaXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ialtrZXkgPSBlbnRyeVswXV0gPSAoZGVzdCA9IG9ialtrZXldKSA/XG4gICAgICAgICAgKHV0aWxzLmlzQXJyYXkoZGVzdCkgPyBbLi4uZGVzdCwgZW50cnlbMV1dIDogW2Rlc3QsIGVudHJ5WzFdXSkgOiBlbnRyeVsxXTtcbiAgICAgIH1cblxuICAgICAgc2V0SGVhZGVycyhvYmosIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldFNldENvb2tpZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCJzZXQtY29va2llXCIpIHx8IFtdO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY2xhc3MgQ2FuY2VsZWRFcnJvciBleHRlbmRzIEF4aW9zRXJyb3Ige1xuICAvKipcbiAgICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgc3VwZXIobWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICAgIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbiAgICB0aGlzLl9fQ0FOQ0VMX18gPSB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsImltcG9ydCBzcGVlZG9tZXRlciBmcm9tIFwiLi9zcGVlZG9tZXRlci5qc1wiO1xuaW1wb3J0IHRocm90dGxlIGZyb20gXCIuL3Rocm90dGxlLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWVcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufVxuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbKGxvYWRlZCkgPT4gdGhyb3R0bGVkWzBdKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSwgdGhyb3R0bGVkWzFdXTtcbn1cblxuZXhwb3J0IGNvbnN0IGFzeW5jRGVjb3JhdG9yID0gKGZuKSA9PiAoLi4uYXJncykgPT4gdXRpbHMuYXNhcCgoKSA9PiBmbiguLi5hcmdzKSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuKC4uLmFyZ3MpO1xuICB9XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncylcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgPyAoKG9yaWdpbiwgaXNNU0lFKSA9PiAodXJsKSA9PiB7XG4gIHVybCA9IG5ldyBVUkwodXJsLCBwbGF0Zm9ybS5vcmlnaW4pO1xuXG4gIHJldHVybiAoXG4gICAgb3JpZ2luLnByb3RvY29sID09PSB1cmwucHJvdG9jb2wgJiZcbiAgICBvcmlnaW4uaG9zdCA9PT0gdXJsLmhvc3QgJiZcbiAgICAoaXNNU0lFIHx8IG9yaWdpbi5wb3J0ID09PSB1cmwucG9ydClcbiAgKTtcbn0pKFxuICBuZXcgVVJMKHBsYXRmb3JtLm9yaWdpbiksXG4gIHBsYXRmb3JtLm5hdmlnYXRvciAmJiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHBsYXRmb3JtLm5hdmlnYXRvci51c2VyQWdlbnQpXG4pIDogKCkgPT4gdHJ1ZTtcbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lU2l0ZSkge1xuICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgICAgY29uc3QgY29va2llID0gW2Ake25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXTtcblxuICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgIGNvb2tpZS5wdXNoKGBleHBpcmVzPSR7bmV3IERhdGUoZXhwaXJlcykudG9VVENTdHJpbmcoKX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICBjb29raWUucHVzaChgcGF0aD0ke3BhdGh9YCk7XG4gICAgICB9XG4gICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICBjb29raWUucHVzaChgZG9tYWluPSR7ZG9tYWlufWApO1xuICAgICAgfVxuICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICB9XG4gICAgICBpZiAodXRpbHMuaXNTdHJpbmcoc2FtZVNpdGUpKSB7XG4gICAgICAgIGNvb2tpZS5wdXNoKGBTYW1lU2l0ZT0ke3NhbWVTaXRlfWApO1xuICAgICAgfVxuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoPzpefDsgKScgKyBuYW1lICsgJz0oW147XSopJykpO1xuICAgICAgcmV0dXJuIG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzFdKSA6IG51bGw7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDAsICcvJyk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwsIGFsbG93QWJzb2x1dGVVcmxzKSB7XG4gIGxldCBpc1JlbGF0aXZlVXJsID0gIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKTtcbiAgaWYgKGJhc2VVUkwgJiYgKGlzUmVsYXRpdmVVcmwgfHwgYWxsb3dBYnNvbHV0ZVVybHMgPT0gZmFsc2UpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuXG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vQXhpb3NIZWFkZXJzLmpzXCI7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT5cbiAgdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIHByb3AsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHsgY2FzZWxlc3MgfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgcHJvcCwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBwcm9wLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIsIHByb3ApID0+XG4gICAgICBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCBwcm9wLCB0cnVlKSxcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIE9iamVjdC5rZXlzKHsgLi4uY29uZmlnMSwgLi4uY29uZmlnMiB9KSxcbiAgICBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgICAgaWYgKFxuICAgICAgICBwcm9wID09PSBcIl9fcHJvdG9fX1wiIHx8XG4gICAgICAgIHByb3AgPT09IFwiY29uc3RydWN0b3JcIiB8fFxuICAgICAgICBwcm9wID09PSBcInByb3RvdHlwZVwiXG4gICAgICApXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IG1lcmdlID0gdXRpbHMuaGFzT3duUHJvcChtZXJnZU1hcCwgcHJvcClcbiAgICAgICAgPyBtZXJnZU1hcFtwcm9wXVxuICAgICAgICA6IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fFxuICAgICAgICAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBpc1VSTFNhbWVPcmlnaW4gZnJvbSBcIi4vaXNVUkxTYW1lT3JpZ2luLmpzXCI7XG5pbXBvcnQgY29va2llcyBmcm9tIFwiLi9jb29raWVzLmpzXCI7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tIFwiLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzXCI7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSBcIi4uL2NvcmUvbWVyZ2VDb25maWcuanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSBcIi4vYnVpbGRVUkwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQgeyBkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGggfSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCwgbmV3Q29uZmlnLmFsbG93QWJzb2x1dGVVcmxzKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIGJyb3dzZXIgaGFuZGxlcyBpdFxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICAvLyBOb2RlLmpzIEZvcm1EYXRhIChsaWtlIGZvcm0tZGF0YSBwYWNrYWdlKVxuICAgICAgY29uc3QgZm9ybUhlYWRlcnMgPSBkYXRhLmdldEhlYWRlcnMoKTtcbiAgICAgIC8vIE9ubHkgc2V0IHNhZmUgaGVhZGVycyB0byBhdm9pZCBvdmVyd3JpdGluZyBzZWN1cml0eSBoZWFkZXJzXG4gICAgICBjb25zdCBhbGxvd2VkSGVhZGVycyA9IFsnY29udGVudC10eXBlJywgJ2NvbnRlbnQtbGVuZ3RoJ107XG4gICAgICBPYmplY3QuZW50cmllcyhmb3JtSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICBpZiAoYWxsb3dlZEhlYWRlcnMuaW5jbHVkZXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0gIFxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn1cblxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXJ9IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXZlbnQpIHtcbiAgICAgICAvLyBCcm93c2VycyBkZWxpdmVyIGEgUHJvZ3Jlc3NFdmVudCBpbiBYSFIgb25lcnJvclxuICAgICAgIC8vIChtZXNzYWdlIG1heSBiZSBlbXB0eTsgd2hlbiBwcmVzZW50LCBzdXJmYWNlIGl0KVxuICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvZXJyb3JfZXZlbnRcbiAgICAgICBjb25zdCBtc2cgPSBldmVudCAmJiBldmVudC5tZXNzYWdlID8gZXZlbnQubWVzc2FnZSA6ICdOZXR3b3JrIEVycm9yJztcbiAgICAgICBjb25zdCBlcnIgPSBuZXcgQXhpb3NFcnJvcihtc2csIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICAgLy8gYXR0YWNoIHRoZSB1bmRlcmx5aW5nIGV2ZW50IGZvciBjb25zdW1lcnMgd2hvIHdhbnQgZGV0YWlsc1xuICAgICAgIGVyci5ldmVudCA9IGV2ZW50IHx8IG51bGw7XG4gICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcbiAgICBcbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAoW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAoW3VwbG9hZFRocm90dGxlZCwgZmx1c2hVcGxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcykpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbHVzaFVwbG9hZCk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cbiIsImltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gXCIuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qc1wiO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBjb25zdCB7bGVuZ3RofSA9IChzaWduYWxzID0gc2lnbmFscyA/IHNpZ25hbHMuZmlsdGVyKEJvb2xlYW4pIDogW10pO1xuXG4gIGlmICh0aW1lb3V0IHx8IGxlbmd0aCkge1xuICAgIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgbGV0IGFib3J0ZWQ7XG5cbiAgICBjb25zdCBvbmFib3J0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBlcnIgPSByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IHRoaXMucmVhc29uO1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRpbWVyID0gdGltZW91dCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgb2YgJHt0aW1lb3V0fW1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICAgIH0sIHRpbWVvdXQpXG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzaWduYWxzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gICAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgICByZXR1cm4gc2lnbmFsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwiXG5leHBvcnQgY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZWFkU3RyZWFtKGl0ZXJhYmxlKSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhjaHVuaywgY2h1bmtTaXplKTtcbiAgfVxufVxuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgX29uRmluaXNoKCk7XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgIGxldCBsb2FkZWRCeXRlcyA9IGJ5dGVzICs9IGxlbjtcbiAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfb25GaW5pc2goZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuaW1wb3J0IGNvbXBvc2VTaWduYWxzIGZyb20gXCIuLi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzXCI7XG5pbXBvcnQge3RyYWNrU3RyZWFtfSBmcm9tIFwiLi4vaGVscGVycy90cmFja1N0cmVhbS5qc1wiO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXIsIHByb2dyZXNzRXZlbnREZWNvcmF0b3IsIGFzeW5jRGVjb3JhdG9yfSBmcm9tIFwiLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qc1wiO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuaW1wb3J0IHNldHRsZSBmcm9tIFwiLi4vY29yZS9zZXR0bGUuanNcIjtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCB7aXNGdW5jdGlvbn0gPSB1dGlscztcblxuY29uc3QgZ2xvYmFsRmV0Y2hBUEkgPSAoKHtSZXF1ZXN0LCBSZXNwb25zZX0pID0+ICh7XG4gIFJlcXVlc3QsIFJlc3BvbnNlXG59KSkodXRpbHMuZ2xvYmFsKTtcblxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbSwgVGV4dEVuY29kZXJcbn0gPSB1dGlscy5nbG9iYWw7XG5cblxuY29uc3QgdGVzdCA9IChmbiwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIWZuKC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuY29uc3QgZmFjdG9yeSA9IChlbnYpID0+IHtcbiAgZW52ID0gdXRpbHMubWVyZ2UuY2FsbCh7XG4gICAgc2tpcFVuZGVmaW5lZDogdHJ1ZVxuICB9LCBnbG9iYWxGZXRjaEFQSSwgZW52KTtcblxuICBjb25zdCB7ZmV0Y2g6IGVudkZldGNoLCBSZXF1ZXN0LCBSZXNwb25zZX0gPSBlbnY7XG4gIGNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSBlbnZGZXRjaCA/IGlzRnVuY3Rpb24oZW52RmV0Y2gpIDogdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBpc1JlcXVlc3RTdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKFJlcXVlc3QpO1xuICBjb25zdCBpc1Jlc3BvbnNlU3VwcG9ydGVkID0gaXNGdW5jdGlvbihSZXNwb25zZSk7XG5cbiAgaWYgKCFpc0ZldGNoU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgaXNGdW5jdGlvbihSZWFkYWJsZVN0cmVhbSk7XG5cbiAgY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgICBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVxdWVzdChzdHIpLmFycmF5QnVmZmVyKCkpXG4gICk7XG5cbiAgY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgdGVzdCgoKSA9PiB7XG4gICAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICdoYWxmJztcbiAgICAgIH0sXG4gICAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgcmV0dXJuIGR1cGxleEFjY2Vzc2VkICYmICFoYXNDb250ZW50VHlwZTtcbiAgfSk7XG5cbiAgY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVzcG9uc2VTdXBwb3J0ZWQgJiYgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICAgIHRlc3QoKCkgPT4gdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoJycpLmJvZHkpKTtcblxuICBjb25zdCByZXNvbHZlcnMgPSB7XG4gICAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbiAgfTtcblxuICBpc0ZldGNoU3VwcG9ydGVkICYmICgoKCkgPT4ge1xuICAgIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSAocmVzLCBjb25maWcpID0+IHtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHJlcyAmJiByZXNbdHlwZV07XG5cbiAgICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBtZXRob2QuY2FsbChyZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pXG4gICAgfSk7XG4gIH0pKCkpO1xuXG4gIGNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICAgIGlmIChib2R5ID09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Jsb2IoYm9keSkpIHtcbiAgICAgIHJldHVybiBib2R5LnNpemU7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpIHx8IHV0aWxzLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgICBib2R5ID0gYm9keSArICcnO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1N0cmluZyhib2R5KSkge1xuICAgICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihoZWFkZXJzLmdldENvbnRlbnRMZW5ndGgoKSk7XG5cbiAgICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBsZXQge1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgZGF0YSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIGNhbmNlbFRva2VuLFxuICAgICAgdGltZW91dCxcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGZldGNoT3B0aW9uc1xuICAgIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgICBsZXQgX2ZldGNoID0gZW52RmV0Y2ggfHwgZmV0Y2g7XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhbc2lnbmFsLCBjYW5jZWxUb2tlbiAmJiBjYW5jZWxUb2tlbi50b0Fib3J0U2lnbmFsKCldLCB0aW1lb3V0KTtcblxuICAgIGxldCByZXF1ZXN0ID0gbnVsbDtcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gY29tcG9zZWRTaWduYWwgJiYgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUgJiYgKCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKFxuICAgICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAgIChyZXF1ZXN0Q29udGVudExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpKSAhPT0gMFxuICAgICAgKSB7XG4gICAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdXRpbHMuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnb21pdCc7XG4gICAgICB9XG5cbiAgICAgIC8vIENsb3VkZmxhcmUgV29ya2VycyB0aHJvd3Mgd2hlbiBjcmVkZW50aWFscyBhcmUgZGVmaW5lZFxuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGZsYXJlL3dvcmtlcmQvaXNzdWVzLzkwMlxuICAgICAgY29uc3QgaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA9IGlzUmVxdWVzdFN1cHBvcnRlZCAmJiBcImNyZWRlbnRpYWxzXCIgaW4gUmVxdWVzdC5wcm90b3R5cGU7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgICBjcmVkZW50aWFsczogaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA/IHdpdGhDcmVkZW50aWFscyA6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgcmVxdWVzdCA9IGlzUmVxdWVzdFN1cHBvcnRlZCAmJiBuZXcgUmVxdWVzdCh1cmwsIHJlc29sdmVkT3B0aW9ucyk7XG5cbiAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IChpc1JlcXVlc3RTdXBwb3J0ZWQgPyBfZmV0Y2gocmVxdWVzdCwgZmV0Y2hPcHRpb25zKSA6IF9mZXRjaCh1cmwsIHJlc29sdmVkT3B0aW9ucykpO1xuXG4gICAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IChpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlKSkpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IG9uRG93bmxvYWRQcm9ncmVzcyAmJiBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgICApIHx8IFtdO1xuXG4gICAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9Mb2FkIGZhaWxlZHxmZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QsIGVyciAmJiBlcnIucmVzcG9uc2UpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0LCBlcnIgJiYgZXJyLnJlc3BvbnNlKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgc2VlZENhY2hlID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgY29uc3QgZ2V0RmV0Y2ggPSAoY29uZmlnKSA9PiB7XG4gIGxldCBlbnYgPSAoY29uZmlnICYmIGNvbmZpZy5lbnYpIHx8IHt9O1xuICBjb25zdCB7ZmV0Y2gsIFJlcXVlc3QsIFJlc3BvbnNlfSA9IGVudjtcbiAgY29uc3Qgc2VlZHMgPSBbXG4gICAgUmVxdWVzdCwgUmVzcG9uc2UsIGZldGNoXG4gIF07XG5cbiAgbGV0IGxlbiA9IHNlZWRzLmxlbmd0aCwgaSA9IGxlbixcbiAgICBzZWVkLCB0YXJnZXQsIG1hcCA9IHNlZWRDYWNoZTtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgc2VlZCA9IHNlZWRzW2ldO1xuICAgIHRhcmdldCA9IG1hcC5nZXQoc2VlZCk7XG5cbiAgICB0YXJnZXQgPT09IHVuZGVmaW5lZCAmJiBtYXAuc2V0KHNlZWQsIHRhcmdldCA9IChpID8gbmV3IE1hcCgpIDogZmFjdG9yeShlbnYpKSlcblxuICAgIG1hcCA9IHRhcmdldDtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5jb25zdCBhZGFwdGVyID0gZ2V0RmV0Y2goKTtcblxuZXhwb3J0IGRlZmF1bHQgYWRhcHRlcjtcbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCAqIGFzIGZldGNoQWRhcHRlciBmcm9tICcuL2ZldGNoLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcblxuLyoqXG4gKiBLbm93biBhZGFwdGVycyBtYXBwaW5nLlxuICogUHJvdmlkZXMgZW52aXJvbm1lbnQtc3BlY2lmaWMgYWRhcHRlcnMgZm9yIEF4aW9zOlxuICogLSBgaHR0cGAgZm9yIE5vZGUuanNcbiAqIC0gYHhocmAgZm9yIGJyb3dzZXJzXG4gKiAtIGBmZXRjaGAgZm9yIGZldGNoIEFQSS1iYXNlZCByZXF1ZXN0c1xuICogXG4gKiBAdHlwZSB7T2JqZWN0PHN0cmluZywgRnVuY3Rpb258T2JqZWN0Pn1cbiAqL1xuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlcixcbiAgZmV0Y2g6IHtcbiAgICBnZXQ6IGZldGNoQWRhcHRlci5nZXRGZXRjaCxcbiAgfVxufTtcblxuLy8gQXNzaWduIGFkYXB0ZXIgbmFtZXMgZm9yIGVhc2llciBkZWJ1Z2dpbmcgYW5kIGlkZW50aWZpY2F0aW9uXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7IHZhbHVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHsgdmFsdWUgfSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlciBhIHJlamVjdGlvbiByZWFzb24gc3RyaW5nIGZvciB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGFkYXB0ZXJzXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgaXMgcmVzb2x2ZWQgKGZ1bmN0aW9uLCBudWxsLCBvciBmYWxzZSlcbiAqIFxuICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfGZhbHNlfSBhZGFwdGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbi8qKlxuICogR2V0IHRoZSBmaXJzdCBzdWl0YWJsZSBhZGFwdGVyIGZyb20gdGhlIHByb3ZpZGVkIGxpc3QuXG4gKiBUcmllcyBlYWNoIGFkYXB0ZXIgaW4gb3JkZXIgdW50aWwgYSBzdXBwb3J0ZWQgb25lIGlzIGZvdW5kLlxuICogVGhyb3dzIGFuIEF4aW9zRXJyb3IgaWYgbm8gYWRhcHRlciBpcyBzdWl0YWJsZS5cbiAqIFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmd8RnVuY3Rpb24+fHN0cmluZ3xGdW5jdGlvbn0gYWRhcHRlcnMgLSBBZGFwdGVyKHMpIGJ5IG5hbWUgb3IgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQXhpb3MgcmVxdWVzdCBjb25maWd1cmF0aW9uXG4gKiBAdGhyb3dzIHtBeGlvc0Vycm9yfSBJZiBubyBzdWl0YWJsZSBhZGFwdGVyIGlzIGF2YWlsYWJsZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgcmVzb2x2ZWQgYWRhcHRlciBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBnZXRBZGFwdGVyKGFkYXB0ZXJzLCBjb25maWcpIHtcbiAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICBjb25zdCB7IGxlbmd0aCB9ID0gYWRhcHRlcnM7XG4gIGxldCBuYW1lT3JBZGFwdGVyO1xuICBsZXQgYWRhcHRlcjtcblxuICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgIGxldCBpZDtcblxuICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGFwdGVyICYmICh1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IChhZGFwdGVyID0gYWRhcHRlci5nZXQoY29uZmlnKSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICB9XG5cbiAgaWYgKCFhZGFwdGVyKSB7XG4gICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgKTtcblxuICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG4vKipcbiAqIEV4cG9ydHMgQXhpb3MgYWRhcHRlcnMgYW5kIHV0aWxpdHkgdG8gcmVzb2x2ZSBhbiBhZGFwdGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLyoqXG4gICAqIFJlc29sdmUgYW4gYWRhcHRlciBmcm9tIGEgbGlzdCBvZiBhZGFwdGVyIG5hbWVzIG9yIGZ1bmN0aW9ucy5cbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgZ2V0QWRhcHRlcixcblxuICAvKipcbiAgICogRXhwb3NlcyBhbGwga25vd24gYWRhcHRlcnNcbiAgICogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9ufE9iamVjdD59XG4gICAqL1xuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tIFwiLi4vYWRhcHRlcnMvYWRhcHRlcnMuanNcIjtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlciwgY29uZmlnKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuMTMuNVwiOyIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxudmFsaWRhdG9ycy5zcGVsbGluZyA9IGZ1bmN0aW9uIHNwZWxsaW5nKGNvcnJlY3RTcGVsbGluZykge1xuICByZXR1cm4gKHZhbHVlLCBvcHQpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgJHtvcHR9IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7Y29ycmVjdFNwZWxsaW5nfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWcgfHwge307XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXkgPSB7fTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjYXNlIHdoZXJlIFwic3RhY2tcIiBpcyBhbiB1bi13cml0YWJsZSBwcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzXG4gICAgaWYgKGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyA9IHRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoY29uZmlnLCB7XG4gICAgICBiYXNlVXJsOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCdiYXNlVVJMJyksXG4gICAgICB3aXRoWHNyZlRva2VuOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCd3aXRoWFNSRlRva2VuJylcbiAgICB9LCB0cnVlKTtcblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBjb25zdCBsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5sZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nO1xuXG4gICAgICBpZiAobGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZykge1xuICAgICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdCguLi5yZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoKC4uLnJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwsIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgdG9BYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVycik7XG4gICAgfTtcblxuICAgIHRoaXMuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIGNvbnRyb2xsZXIuc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdGhpcy51bnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICByZXR1cm4gY29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG4gIFdlYlNlcnZlcklzRG93bjogNTIxLFxuICBDb25uZWN0aW9uVGltZWRPdXQ6IDUyMixcbiAgT3JpZ2luSXNVbnJlYWNoYWJsZTogNTIzLFxuICBUaW1lb3V0T2NjdXJyZWQ6IDUyNCxcbiAgU3NsSGFuZHNoYWtlRmFpbGVkOiA1MjUsXG4gIEludmFsaWRTc2xDZXJ0aWZpY2F0ZTogNTI2LFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICBjb25zdCBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwiLyoqXG4gKiBTZXJpYWxpemVzIG9iamVjdHNcbiAqXG4gKiBAbmFtZSBzZXJpYWxpemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHNlcmlhbGl6ZWRcbiAqIEBwYXJhbSB7QW55fSBwcmVmaXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFNlcmlhbGl6ZWQgb2JqZWN0XG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuc2VyaWFsaXplKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VyaWFsaXplKG9iaiwgcHJlZml4KSB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IGsgPSBwcmVmaXggfHwgcDtcbiAgICAgIGNvbnN0IHYgPSBvYmpbcF07XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZXJpYWxpemUodiwgaylcbiAgICAgICAgOiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBzZXJpYWxpemUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZSc7XG4vKipcbiAqICBSZXR1cm4gUHJvbWlzZSBmb3IgYSB1cmwganNvbiBnZXQgcmVxdWVzdFxuICpcbiAqIEBuYW1lIGdldEpzb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtc1xuICogQHJldHVybnMge09iamVjdH0gcmVzcG9uc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRKc29uKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXJlc3BvbnNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/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+IHtcbiAgICBpZiAoaXNPcGVuIHx8IHN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgZmV0Y2hTdWdnZXN0aW9ucyhzdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9LCBbaXNPcGVuLCBzdGF0ZS5yZW5kZXJNb2JpbGUsIHN0YXRlLnZhbHVlLCBmZXRjaFN1Z2dlc3Rpb25zXSk7XG5cbiAgLy8gdGhpcyBlZmZlY3QgaGFuZGxlcyBzZWxlY3RpbmcgdGhlIHN1Z2dlc3Rpb24gd2hlbiBlbnRlciB3YXMgcHJlc3NlZCBidXQgc3VnZ2VzdGlvbnMgd2VyZSBzdGlsbCBsb2FkaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLmVudGVyUGVuZGluZyAmJiAhc3RhdGUubG9hZGluZykge1xuICAgICAgc2VsZWN0U3VnZ2VzdGlvbihzdGF0ZS5zdWdnZXN0aW9uc1swXSwgMCk7XG4gICAgICBjbG9zZU1lbnUoKTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5sb2FkaW5nLCBzdGF0ZS5wZW5kaW5nRW50ZXIsIHN0YXRlLnN1Z2dlc3Rpb25zXSk7XG5cbiAgY29uc3QgYmFzZUl0ZW1Qcm9wcyA9IHtcbiAgICBsb2FkaW5nOiBzdGF0ZS5sb2FkaW5nLFxuICAgIGlzTW9iaWxlLFxuICAgIGFyaWFGYXZvdXJpdGVTdHJpbmc6IHQoJ2Zhdm91cml0ZScsIHsgbG5nIH0pLFxuICAgIGZvbnRXZWlnaHRzLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnMsXG4gICAgY29sb3JzLFxuICAgIG1vZGVTZXQsXG4gIH07XG5cbiAgY29uc3Qge1xuICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbixcbiAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgIFNlYXJjaEJhcklkLFxuICAgIGFyaWFMYWJlbFRleHQsXG4gIH0gPSBnZXRBcmlhUHJvcHMoe1xuICAgIGlkLFxuICAgIGxuZyxcbiAgICB0LFxuICAgIGlzTW9iaWxlLFxuICAgIGFyaWFMYWJlbCxcbiAgICBzdWdnZXN0aW9uczogc3RhdGUuc3VnZ2VzdGlvbnMsXG4gICAgdmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgIHJlcXVpcmVkLFxuICB9KTtcblxuICBjb25zdCBtb2JpbGVDbGVhck9sZFNlYXJjaGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGV4dCwgY2xlYXJPbGRTZWFyY2hlcywgY2xlYXJGdXR1cmVSb3V0ZXMgfSA9IHNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGZldGNoU3VnZ2VzdGlvbnMoc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVuZGVyTW9iaWxlICYmICFpc09wZW4pIHtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1JFU0VUJywgaW5pdGlhbFN0YXRlIH0pO1xuICAgIH1cbiAgfSwgW3N0YXRlLnJlbmRlck1vYmlsZSwgaXNPcGVuXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgPE1vYmlsZVZpZXdcbiAgICAgICAgICBwbGFjZWhvbGRlcj17dChwbGFjZWhvbGRlciwgeyBsbmcgfSl9XG4gICAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e21vYmlsZUNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgICBtb2JpbGVMYWJlbD17bW9iaWxlTGFiZWwgfHwgdChpZCwgeyBsbmcgfSl9XG4gICAgICAgICAgYXJpYVByb3BzPXt7XG4gICAgICAgICAgICBhcmlhQ3VycmVudFN1Z2dlc3Rpb24sXG4gICAgICAgICAgICBTZWFyY2hCYXJJZCxcbiAgICAgICAgICAgIGFyaWFSZXF1aXJlZFRleHQsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U9e29uU2VsZWN0ZWRJdGVtQ2hhbmdlfVxuICAgICAgICAgIHZhbHVlPXtzdGF0ZS52YWx1ZX1cbiAgICAgICAgICBjbGVhcklucHV0PXtjbGVhcklucHV0fVxuICAgICAgICAgIHN1Z2dlc3Rpb25Qcm9wcz17YmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgICBzaG93U2Nyb2xsPXshIXNob3dTY3JvbGx9XG4gICAgICAgICAgY29sb3JzPXtjb2xvcnN9XG4gICAgICAgICAgaW5wdXRDbGFzc05hbWU9e2lucHV0Q2xhc3NOYW1lfVxuICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgIHN0eWxlc1tpZF0sXG4gICAgICAgICAgc3RhdGUucmVuZGVyTW9iaWxlICYmICdoaWRkZW4nLFxuICAgICAgICBdKX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGNvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogY29sb3JzLmhvdmVyLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7aWNvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgIHN0eWxlc1snYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbiddLFxuICAgICAgICAgICAgICBzdHlsZXNbaWRdLFxuICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZSAmJiBzdHlsZXNbYCR7aW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gXSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQodCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJywgeyBsbmcgfSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz17YCR7aWNvbn1gfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8SW5wdXRcbiAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgYXJpYUxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb25cbiAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBnZXRJbnB1dFByb3BzPXtnZXRJbnB1dFByb3BzfVxuICAgICAgICAgIGdldExhYmVsUHJvcHM9e2dldExhYmVsUHJvcHN9XG4gICAgICAgICAgc2VsZWN0SXRlbT17c2VsZWN0SXRlbX1cbiAgICAgICAgICB2YWx1ZT17c3RhdGUudmFsdWV9XG4gICAgICAgICAgY2xlYXJJbnB1dD17Y2xlYXJJbnB1dH1cbiAgICAgICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgc3R5bGVzPXtzdHlsZXN9XG4gICAgICAgICAgY2xlYXJCdXR0b25Db2xvcj17Y29sb3JzLnByaW1hcnl9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3RyYW5zbGF0ZWRQbGFjZWhvbGRlciB8fCB0KHBsYWNlaG9sZGVyLCB7IGxuZyB9KX1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX1cbiAgICAgICAgICBpc01vYmlsZT17aXNNb2JpbGV9XG4gICAgICAgICAgaW5wdXRPbkJsdXI9e2lucHV0T25CbHVyfVxuICAgICAgICAvPlxuXG4gICAgICAgIDxTdWdnZXN0aW9uc1xuICAgICAgICAgIGhpZGRlbj17IWlzT3BlbiB8fCBpc01vYmlsZX1cbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4PXtoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgIGdldEl0ZW1Qcm9wcz17Z2V0SXRlbVByb3BzfVxuICAgICAgICAgIGdldE1lbnVQcm9wcz17Z2V0TWVudVByb3BzfVxuICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdGF0ZS5zdWdnZXN0aW9uc31cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICB7Li4uYmFzZUl0ZW1Qcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5EVEF1dG9zdWdnZXN0LnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xlYXJGdXR1cmVSb3V0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH0pLFxuICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVmUG9pbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICB9KSxcbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgfSksXG4gIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkRUQXV0b3N1Z2dlc3QuZGVmYXVsdFByb3BzID0ge1xuICBpY29uOiB1bmRlZmluZWQsXG4gIHZhbHVlOiAnJyxcbiAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgbGFuZzogJ2ZpJyxcbiAgc3RvcmVSZWY6IHVuZGVmaW5lZCxcbiAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gIGZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgc291cmNlczogW10sXG4gIHRhcmdldHM6IHVuZGVmaW5lZCxcbiAgaXNNb2JpbGU6IGZhbHNlLFxuICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgZ2VvY29kaW5nU2l6ZTogdW5kZWZpbmVkLFxuICBwYXRoT3B0czoge1xuICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgfSxcbiAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIGZvbnRXZWlnaHRzOiB7XG4gICAgbWVkaXVtOiA1MDAsXG4gIH0sXG4gIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgcmVxdWlyZWQ6IGZhbHNlLFxuICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IGZhbHNlLFxuICByZWZQb2ludDoge30sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiB7XG4gIHJldHVybiAoXG4gICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgIDxEVEF1dG9zdWdnZXN0IHsuLi5wcm9wc30gLz5cbiAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGFkbWluIiwiaW5jbHVkZXMiLCJsYXllciIsImdpZCIsImxhYmVsSWQiLCJndGZzSWQiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwic3BsaXRTaG9ydE5hbWVBdExldHRlcnMiLCJ0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMiLCJ0ZXN0IiwiTGF5ZXJUeXBlIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwiZmlsdGVyIiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImVsZW1lbnQiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsImJpbmQiLCJmbiIsInRoaXNBcmciLCJhcHBseSIsImFyZ3VtZW50cyIsInRvU3RyaW5nIiwiZ2V0UHJvdG90eXBlT2YiLCJ0b1N0cmluZ1RhZyIsImtpbmRPZiIsImNhY2hlIiwiY3JlYXRlIiwidGhpbmciLCJzbGljZSIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0J1ZmZlciIsInZhbCIsImlzRnVuY3Rpb24iLCJpc0FycmF5QnVmZmVyIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc1JlYWRhYmxlU3RyZWFtIiwiaXNSZXF1ZXN0IiwiaXNSZXNwb25zZSIsImlzSGVhZGVycyIsIm9iaiIsImFsbE93bktleXMiLCJsIiwia2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW4iLCJrZXkiLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwic2VsZiIsIndpbmRvdyIsImdsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJjb250ZXh0IiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJpc0hUTUxGb3JtIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wIiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiZGVmaW5lUHJvcGVydGllcyIsImlzQXN5bmNGbiIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJzZXRJbW1lZGlhdGUiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInBvc3RNZXNzYWdlIiwidG9rZW4iLCJyYW5kb20iLCJjYWxsYmFja3MiLCJhZGRFdmVudExpc3RlbmVyIiwiZGF0YSIsInNoaWZ0IiwiY2IiLCJwdXNoIiwic2V0VGltZW91dCIsImFzYXAiLCJxdWV1ZU1pY3JvdGFzayIsInByb2Nlc3MiLCJuZXh0VGljayIsInV0aWxzJDEiLCJpc0Zvcm1EYXRhIiwia2luZCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImJ1ZmZlciIsImlzQm9vbGVhbiIsImlzRW1wdHlPYmplY3QiLCJpc1N0cmVhbSIsInBpcGUiLCJtZXJnZSIsImNhc2VsZXNzIiwic2tpcFVuZGVmaW5lZCIsInRoaXMiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsImV4dGVuZCIsImEiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwiYXNzaWduIiwidG9GbGF0T2JqZWN0Iiwic291cmNlT2JqIiwiZGVzdE9iaiIsInByb3BGaWx0ZXIiLCJtZXJnZWQiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwibGFzdEluZGV4IiwidG9BcnJheSIsImFyciIsImZvckVhY2hFbnRyeSIsIl9pdGVyYXRvciIsIm5leHQiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJoYXNPd25Qcm9wIiwiZnJlZXplTWV0aG9kcyIsInNldCIsIkVycm9yIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwidG9DYW1lbENhc2UiLCJtIiwidG9VcHBlckNhc2UiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJpc0Zpbml0ZSIsImlzU3BlY0NvbXBsaWFudEZvcm0iLCJ0b0pTT05PYmplY3QiLCJzdGFjayIsInZpc2l0IiwidGFyZ2V0IiwicmVkdWNlZFZhbHVlIiwiaXNUaGVuYWJsZSIsInRoZW4iLCJjYXRjaCIsImlzSXRlcmFibGUiLCJBeGlvc0Vycm9yIiwiZnJvbSIsImVycm9yIiwiY29kZSIsImNvbmZpZyIsInJlcXVlc3QiLCJyZXNwb25zZSIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsIm1lc3NhZ2UiLCJjYXVzZSIsInN1cGVyIiwiaXNBeGlvc0Vycm9yIiwic3RhdHVzIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJ1dGlscyIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiLCJBeGlvc0Vycm9yJDEiLCJpc1Zpc2l0YWJsZSIsInJlbW92ZUJyYWNrZXRzIiwicmVuZGVyS2V5IiwicGF0aCIsImRvdHMiLCJwcmVkaWNhdGVzIiwidG9Gb3JtRGF0YSIsImZvcm1EYXRhIiwib3B0aW9ucyIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsIkJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzb21lIiwiaXNGbGF0QXJyYXkiLCJlbCIsImluZGV4IiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsInBvcCIsImVuY29kZSIsImNoYXJNYXAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsIl9wYWlycyIsImJ1aWxkVVJMIiwidXJsIiwiX2VuY29kZSIsIl9vcHRpb25zIiwic2VyaWFsaXplIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsImVuY29kZXIiLCJJbnRlcmNlcHRvck1hbmFnZXIkMSIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiaCIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nIiwicGxhdGZvcm0kMSIsImlzQnJvd3NlciIsImNsYXNzZXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJwcm90b2NvbHMiLCJoYXNCcm93c2VyRW52IiwiZG9jdW1lbnQiLCJfbmF2aWdhdG9yIiwibmF2aWdhdG9yIiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsImxvY2F0aW9uIiwiaHJlZiIsInBsYXRmb3JtIiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJhcnJheVRvT2JqZWN0IiwiZW50cmllcyIsInBhcnNlUHJvcFBhdGgiLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiaGVhZGVycyIsImNvbnRlbnRUeXBlIiwiZ2V0Q29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImhlbHBlcnMiLCJpc05vZGUiLCJ0b1VSTEVuY29kZWRGb3JtIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJyYXdWYWx1ZSIsInBhcnNlciIsInBhcnNlIiwic3RyaW5naWZ5U2FmZWx5IiwidHJhbnNmb3JtUmVzcG9uc2UiLCJKU09OUmVxdWVzdGVkIiwicmVzcG9uc2VUeXBlIiwic3RyaWN0SlNPTlBhcnNpbmciLCJwYXJzZVJldml2ZXIiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJBY2NlcHQiLCJtZXRob2QiLCJkZWZhdWx0cyQxIiwiaWdub3JlRHVwbGljYXRlT2YiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInBhcnNlSGVhZGVycyIsImRlc3QiLCJlbnRyeSIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJoYXMiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ3IiwiY2hhciIsImZvcm1hdEhlYWRlciIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJnZXRTZXRDb29raWUiLCJmaXJzdCIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJidWlsZEFjY2Vzc29ycyIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwiQXhpb3NIZWFkZXJzJDEiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciQxIiwic2V0dGxlIiwicmVzb2x2ZSIsInJlamVjdCIsImZsb29yIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJmcmVxIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsIm1pbiIsImJ5dGVzIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwibm93IiwiRGF0ZSIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsInNwZWVkb21ldGVyIiwibGFzdEFyZ3MiLCJ0aW1lciIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImludm9rZSIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJ0aHJvdHRsZSIsImxvYWRlZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJldmVudCIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJhc3luY0RlY29yYXRvciIsImlzVVJMU2FtZU9yaWdpbiIsImlzTVNJRSIsIlVSTCIsInByb3RvY29sIiwiaG9zdCIsInBvcnQiLCJ1c2VyQWdlbnQiLCJjb29raWVzIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwic2FtZVNpdGUiLCJjb29raWUiLCJ0b1VUQ1N0cmluZyIsInJlYWQiLCJSZWdFeHAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJidWlsZEZ1bGxQYXRoIiwiYmFzZVVSTCIsInJlcXVlc3RlZFVSTCIsImFsbG93QWJzb2x1dGVVcmxzIiwiaXNSZWxhdGl2ZVVybCIsInJlbGF0aXZlVVJMIiwiY29tYmluZVVSTHMiLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsInBhcmFtc1NlcmlhbGl6ZXIiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsIndpdGhYU1JGVG9rZW4iLCJvblVwbG9hZFByb2dyZXNzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiZGVjb21wcmVzcyIsImJlZm9yZVJlZGlyZWN0IiwidHJhbnNwb3J0IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsImNhbmNlbFRva2VuIiwic29ja2V0UGF0aCIsInJlc3BvbnNlRW5jb2RpbmciLCJjb25maWdWYWx1ZSIsInJlc29sdmVDb25maWciLCJuZXdDb25maWciLCJhdXRoIiwiYnRvYSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsImdldEhlYWRlcnMiLCJmb3JtSGVhZGVycyIsImFsbG93ZWRIZWFkZXJzIiwieHNyZlZhbHVlIiwieGhyQWRhcHRlciIsIlhNTEh0dHBSZXF1ZXN0IiwiUHJvbWlzZSIsIl9jb25maWciLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwiZXJyIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJvbmFib3J0Iiwib25lcnJvciIsIm1zZyIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJzZXRSZXF1ZXN0SGVhZGVyIiwidXBsb2FkIiwiY2FuY2VsIiwiQ2FuY2VsZWRFcnJvciIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInBhcnNlUHJvdG9jb2wiLCJzZW5kIiwiY29tcG9zZVNpZ25hbHMkMSIsInNpZ25hbHMiLCJCb29sZWFuIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInJlYXNvbiIsInN0cmVhbUNodW5rIiwiY2h1bmsiLCJjaHVua1NpemUiLCJieXRlTGVuZ3RoIiwiZW5kIiwicG9zIiwicmVhZFN0cmVhbSIsImFzeW5jIiwic3RyZWFtIiwiYXN5bmNJdGVyYXRvciIsInJlYWRlciIsImdldFJlYWRlciIsInRyYWNrU3RyZWFtIiwib25Qcm9ncmVzcyIsIm9uRmluaXNoIiwiaXRlcmFibGUiLCJyZWFkQnl0ZXMiLCJfb25GaW5pc2giLCJSZWFkYWJsZVN0cmVhbSIsInB1bGwiLCJjbG9zZSIsImxvYWRlZEJ5dGVzIiwiZW5xdWV1ZSIsInJldHVybiIsImhpZ2hXYXRlck1hcmsiLCJnbG9iYWxGZXRjaEFQSSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIlRleHRFbmNvZGVyIiwiZmFjdG9yeSIsImZldGNoIiwiZW52RmV0Y2giLCJpc0ZldGNoU3VwcG9ydGVkIiwiaXNSZXF1ZXN0U3VwcG9ydGVkIiwiaXNSZXNwb25zZVN1cHBvcnRlZCIsImlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQiLCJlbmNvZGVUZXh0IiwiYXJyYXlCdWZmZXIiLCJzdXBwb3J0c1JlcXVlc3RTdHJlYW0iLCJkdXBsZXhBY2Nlc3NlZCIsImhhc0NvbnRlbnRUeXBlIiwiYm9keSIsImR1cGxleCIsInN1cHBvcnRzUmVzcG9uc2VTdHJlYW0iLCJyZXNvbHZlcnMiLCJyZXMiLCJyZXNvbHZlQm9keUxlbmd0aCIsImdldENvbnRlbnRMZW5ndGgiLCJzaXplIiwiX3JlcXVlc3QiLCJnZXRCb2R5TGVuZ3RoIiwiZmV0Y2hPcHRpb25zIiwiX2ZldGNoIiwiY29tcG9zZWRTaWduYWwiLCJjb21wb3NlU2lnbmFscyIsInRvQWJvcnRTaWduYWwiLCJyZXF1ZXN0Q29udGVudExlbmd0aCIsImNvbnRlbnRUeXBlSGVhZGVyIiwiZmx1c2giLCJpc0NyZWRlbnRpYWxzU3VwcG9ydGVkIiwicmVzb2x2ZWRPcHRpb25zIiwiY3JlZGVudGlhbHMiLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwicmVzcG9uc2VEYXRhIiwic2VlZENhY2hlIiwiTWFwIiwiZ2V0RmV0Y2giLCJzZWVkcyIsInNlZWQiLCJrbm93bkFkYXB0ZXJzIiwiaHR0cCIsInhociIsImZldGNoQWRhcHRlci5nZXRGZXRjaCIsInJlbmRlclJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJhZGFwdGVycyIsImdldEFkYXB0ZXIiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwicyIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwiZGlzcGF0Y2hSZXF1ZXN0IiwiVkVSU0lPTiIsInZhbGlkYXRvcnMiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2YWxpZGF0b3JzJDEiLCJ2YWxpZGF0b3IiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiY29uc29sZSIsIndhcm4iLCJzcGVsbGluZyIsImNvcnJlY3RTcGVsbGluZyIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiY29uZmlnT3JVcmwiLCJkdW1teSIsImNhcHR1cmVTdGFja1RyYWNlIiwiYm9vbGVhbiIsImZ1bmN0aW9uIiwiYmFzZVVybCIsIndpdGhYc3JmVG9rZW4iLCJjb250ZXh0SGVhZGVycyIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJ1bnNoaWZ0IiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwicHJvbWlzZSIsImNoYWluIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2V0VXJpIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiQXhpb3MkMSIsIkNhbmNlbFRva2VuIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsIl9saXN0ZW5lcnMiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwiYyIsIkNhbmNlbFRva2VuJDEiLCJIdHRwU3RhdHVzQ29kZSIsIkNvbnRpbnVlIiwiU3dpdGNoaW5nUHJvdG9jb2xzIiwiUHJvY2Vzc2luZyIsIkVhcmx5SGludHMiLCJPayIsIkNyZWF0ZWQiLCJBY2NlcHRlZCIsIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsIk5vQ29udGVudCIsIlJlc2V0Q29udGVudCIsIlBhcnRpYWxDb250ZW50IiwiTXVsdGlTdGF0dXMiLCJBbHJlYWR5UmVwb3J0ZWQiLCJJbVVzZWQiLCJNdWx0aXBsZUNob2ljZXMiLCJNb3ZlZFBlcm1hbmVudGx5IiwiRm91bmQiLCJTZWVPdGhlciIsIk5vdE1vZGlmaWVkIiwiVXNlUHJveHkiLCJVbnVzZWQiLCJUZW1wb3JhcnlSZWRpcmVjdCIsIlBlcm1hbmVudFJlZGlyZWN0IiwiQmFkUmVxdWVzdCIsIlVuYXV0aG9yaXplZCIsIlBheW1lbnRSZXF1aXJlZCIsIkZvcmJpZGRlbiIsIk5vdEZvdW5kIiwiTWV0aG9kTm90QWxsb3dlZCIsIk5vdEFjY2VwdGFibGUiLCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJSZXF1ZXN0VGltZW91dCIsIkNvbmZsaWN0IiwiR29uZSIsIkxlbmd0aFJlcXVpcmVkIiwiUHJlY29uZGl0aW9uRmFpbGVkIiwiUGF5bG9hZFRvb0xhcmdlIiwiVXJpVG9vTG9uZyIsIlVuc3VwcG9ydGVkTWVkaWFUeXBlIiwiUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsIkV4cGVjdGF0aW9uRmFpbGVkIiwiSW1BVGVhcG90IiwiTWlzZGlyZWN0ZWRSZXF1ZXN0IiwiVW5wcm9jZXNzYWJsZUVudGl0eSIsIkxvY2tlZCIsIkZhaWxlZERlcGVuZGVuY3kiLCJUb29FYXJseSIsIlVwZ3JhZGVSZXF1aXJlZCIsIlByZWNvbmRpdGlvblJlcXVpcmVkIiwiVG9vTWFueVJlcXVlc3RzIiwiUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIiwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLCJJbnRlcm5hbFNlcnZlckVycm9yIiwiTm90SW1wbGVtZW50ZWQiLCJCYWRHYXRld2F5IiwiU2VydmljZVVuYXZhaWxhYmxlIiwiR2F0ZXdheVRpbWVvdXQiLCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsIlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsIkluc3VmZmljaWVudFN0b3JhZ2UiLCJMb29wRGV0ZWN0ZWQiLCJOb3RFeHRlbmRlZCIsIk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiV2ViU2VydmVySXNEb3duIiwiQ29ubmVjdGlvblRpbWVkT3V0IiwiT3JpZ2luSXNVbnJlYWNoYWJsZSIsIlRpbWVvdXRPY2N1cnJlZCIsIlNzbEhhbmRzaGFrZUZhaWxlZCIsIkludmFsaWRTc2xDZXJ0aWZpY2F0ZSIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZGVmYXVsdCIsImF4aW9zJDEiLCJwcmVmaXgiLCJwIiwiayIsInYiLCJnZXRKc29uIiwiZW5jb2RlVVJJIiwic2VhcmNoIiwiZ2V0R2VvY29kaW5nUmVzdWx0cyIsInNlYXJjaFBhcmFtcyIsImxhbmciLCJmb2N1c1BvaW50Iiwic291cmNlcyIsInBlbGlhc1VybCIsIm1pbmltYWxSZWdleHAiLCJnZW9jb2RpbmdMYXllcnMiLCJ0ZXh0IiwiUEVMSUFTX1VSTCIsIl9vYmplY3RTcHJlYWQiLCJsYXllcnMiLCJmZWF0dXJlcyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJzdG9wT3JTdGF0aW9uIiwiaWRzIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZmlsdGVyT2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJzdG9wTGF5ZXJzIiwiZGVib3VuY2VkU2VhcmNoIiwiZGVib3VuY2UiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwicGF0aE9wdHMiLCJyZWZQb2ludCIsImdldFBvc2l0aW9ucyIsImdldEZhdm91cml0ZUxvY2F0aW9ucyIsImdldE9sZFNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiaXNQZWxpYXNMb2NhdGlvbkF3YXJlIiwibG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsIm1vZGUiLCJnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5Iiwic2VsZWN0UG9zaXRpb25Gb21NYXAiLCJpdGVtcyIsImZhdm91cml0ZUxvY2F0aW9ucyIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImZhdm91cml0ZVN0b3BzIiwiaGFzRmF2b3VyaXRlcyIsInNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJmYXZvdXJpdGVzIiwiZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zIiwibG9jYXRpb25IaXN0b3J5IiwiZmVlZElkcyIsImhpc3RvcnkiLCJ1c2VTdG9wcyIsInVzZVN0YXRpb25zIiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5Iiwic3RvcHNTdGF0aW9ucyIsImZpbHRlckZhdm91cml0ZVN0b3BzIiwiZGVkdXBlc3RvcHMiLCJmZWVkcyIsInN0b3BIaXN0b3J5IiwiZmF2b3VyaXRlUm91dGVzIiwicm91dGVIaXN0b3J5IiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24iLCJmbGF0dGVuIiwibGVhZGluZyIsImkxOG4iLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlIiwidHJhbnNsYXRpb24iLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjdXJyZW50cG9zaXRpb24iLCJkZWxldGUiLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsIm93bmxvY2F0aW9ucyIsImxvYWRpbmciLCJyYWlsIiwic3RyZWV0Iiwic3Vid2F5Iiwic3RhdGlvbiIsInRyYW0iLCJ2ZW51ZSIsIndoZXJlIiwicGxhY2UiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInJlcXVpcmVkIiwidHJhY2siLCJmaSIsInZlaGljbGVyZW50YWxzdGF0aW9uIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiaW5pdCIsImdldExvY2FsYWRtaW4iLCJzdWdnZXN0aW9uIiwiZ2V0U3RvcENvZGUiLCJnZXROYW1lTGFiZWwiLCJtZW1vaXplIiwicGxhaW4iLCJlc2NhcGVSZWdFeHAiLCJsb25nTmFtZSIsImFnZW5jeSIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJjbG9uZURlZXAiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJ3aGljaCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsImlzUE9JU2VhcmNoIiwiZ2V0UGxhdGZvcm0iLCJsbmciLCJHVEZTIiwibW9kZXMiLCJnZXRTdWdnZXN0aW9uQ29udGVudCIsInN1Z2dlc3Rpb25UeXBlIiwiX2l0ZW0kcHJvcGVydGllcyRhZGRlIiwidGFpbDEiLCJsb2NhbGl0eSIsInRhaWwyIiwibmFtZTEiLCJuYW1lMiIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSIsInRpbWUiLCJEYXRlVGltZSIsImZyb21TZWNvbmRzIiwiYXJyaXZlQnkiLCJoYXNTYW1lIiwicGx1cyIsImRheXMiLCJ0b0Zvcm1hdCIsImdldFN1Z2dlc3Rpb25WYWx1ZSIsImdldExhYmVsIiwic3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQiLCJzdWdnZXN0aW9ucyIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlJCQwIiwibiIsImciLCJpZ25vcmUiLCJ0b3BPbkVtcHR5SGFzaCIsInNwZWVkIiwic3BlZWRBc0R1cmF0aW9uIiwiZHVyYXRpb25NYXgiLCJkdXJhdGlvbk1pbiIsImNsaXAiLCJvZmZzZXQiLCJlYXNpbmciLCJjdXN0b21FYXNpbmciLCJ1cGRhdGVVUkwiLCJwb3BzdGF0ZSIsImVtaXRFdmVudHMiLCJjaGFyQXQiLCJzdWJzdHIiLCJ1IiwiSW52YWxpZENoYXJhY3RlckVycm9yIiwibWF4Iiwic2Nyb2xsSGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwicGFyc2VJbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwib3V0bGluZSIsInNjcm9sbFRvIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiZGV0YWlsIiwiYW5jaG9yIiwidG9nZ2xlIiwiZGlzcGF0Y2hFdmVudCIsImYiLCJkIiwiY2FuY2VsU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsIiwidGFnTmFtZSIsInkiLCJwYWdlWU9mZnNldCIsInF1ZXJ5U2VsZWN0b3IiLCJFIiwiTyIsIm9mZnNldFBhcmVudCIsImlubmVySGVpZ2h0IiwiUyIsIl8iLCJJIiwiTSIsIkwiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwdXNoU3RhdGUiLCJzbW9vdGhTY3JvbGwiLCJ0aXRsZSIsIm1hdGNoTWVkaWEiLCJkZWZhdWx0UHJldmVudGVkIiwiYnV0dG9uIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsImNsb3Nlc3QiLCJob3N0bmFtZSIsInBhdGhuYW1lIiwiaGFzaCIsInJlcGxhY2VTdGF0ZSIsImRlc3Ryb3kiLCJFbGVtZW50IiwiX19jcmVhdGVCaW5kaW5nIiwiX19leHBvcnRTdGFyIiwidXNlQXJyb3dOYXZpZ2F0aW9uIiwibGlzdEl0ZW1zIiwib25BcnJvd1VwT3JEb3duIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInNlbGVjdGVkSW5kZXgiLCJ1c2VEZWJvdW5jZSIsInVzZUVsZW1lbnRTaXplIiwidXNlUmVmIiwid2lkdGgiLCJjbGllbnRXaWR0aCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJjb250YWluZXJSZWYiLCJpc1Zpc2libGUiLCJ1c2VJc0JyZWFrcG9pbnQiLCJ4cyIsIm1vYmlsZVNtYWxsIiwibW9iaWxlIiwidGFibGV0IiwidGFibGV0TGFyZ2UiLCJkZXNrdG9wU21hbGwiLCJkZXNrdG9wIiwiZGVza3RvcExhcmdlIiwiaW5uZXJXaWR0aCIsInVzZU9uUmVzaXplIiwidXNlSXNMb2FkaW5nQWZ0ZXJFcnJvciIsInVzZUlzTW9iaWxlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU9uTG9zZUZvY3VzV2l0aGluIiwid2F0Y2giLCJwYXNzaXZlIiwidXNlT25XaW5kb3dGb2N1cyIsInZpc2liaWxpdHlTdGF0ZSIsInVzZU91dHNpZGVSZWFjdGVyIiwiY29udGFpbnMiLCJ1c2VSdW5BZnRlclVwZGF0ZSIsInVzZVNjcm9sbExvY2siLCJsb2NrIiwic2Nyb2xsWSIsInRvcCIsInVubG9jayIsIl9faW1wb3J0RGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJ1c2VTbW9vdGhTY3JvbGwiLCJGdW5jdGlvbiIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIlN1Z2dlc3Rpb24iLCJfcmVmIiwiZ2V0SXRlbVByb3BzIiwiaGlnaGxpZ2h0ZWRJbmRleCIsIml0ZW1JbmRleCIsInN0eWxlcyIsInJlc3QiLCJfZXhjbHVkZWQiLCJ1c2VUcmFuc2xhdGlvbiIsIlJlYWN0IiwiY2xhc3NOYW1lIiwiY3giLCJzdWdnZXN0aW9uSGlnaGxpZ2h0ZWQiLCJTdWdnZXN0aW9uSXRlbSIsIml0ZW1TaGFwZSIsIlByb3BUeXBlcyIsIk5PREVfRU5WIiwic2hhcGUiLCJzdHJpbmciLCJzZWxlY3RlZEljb25JZCIsImljb25Db2xvciIsImNvbG9yIiwiYm9vbCIsIlN1Z2dlc3Rpb25zIiwiX3JlZjIiLCJnZXRNZW51UHJvcHMiLCJoaWRkZW4iLCJyZW5kZXJDbGVhckhpc3RvcnlCdXR0b24iLCJoYW5kbGVDbGVhckhpc3RvcnkiLCJfZXhjbHVkZWQyIiwic3VnZ2VzdGlvbnNDb250YWluZXJPcGVuIiwic3VnZ2VzdGlvbnNDb250YWluZXIiLCJzdWdnZXN0aW9uc0xpc3QiLCJvbkNsaWNrIiwicHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJvYmplY3RPZiIsImFycmF5T2YiLCJkZWZhdWx0UHJvcHMiLCJDbGVhckJ1dHRvbiIsImNsZWFySW5wdXQiLCJvbktleURvd24iLCJJY29uIiwiaW1nIiwicGxhY2Vob2xkZXIiLCJnZXRJbnB1dFByb3BzIiwiZ2V0TGFiZWxQcm9wcyIsImFyaWFMYWJlbCIsImlucHV0UmVmIiwicmVuZGVyTGFiZWwiLCJpc01vYmlsZSIsImlucHV0Q2xhc3NOYW1lIiwiY2xlYXJCdXR0b25Db2xvciIsImF1dG9Gb2N1cyIsImlucHV0T25CbHVyIiwiY29udGFpbmVyIiwiaHRtbEZvciIsInRoaW4iLCJoYXNWYWx1ZSIsIm9uQmx1ciIsIm9uZU9mVHlwZSIsIm9iamVjdCIsIk1vYmlsZVZpZXciLCJhcHBFbGVtZW50Iiwib25TZWxlY3RlZEl0ZW1DaGFuZ2UiLCJmb250V2VpZ2h0cyIsImNsZWFyT2xkU2VhcmNoZXMiLCJzdWdnZXN0aW9uUHJvcHMiLCJhcmlhUHJvcHMiLCJtb2JpbGVMYWJlbCIsInNob3dTY3JvbGwiLCJkaXNwYXRjaCIsImNvbG9ycyIsImhvb2tzIiwibW9iaWxlU3R5bGVzIiwibW9iaWxlTm9TY3JvbGxTdHlsZXMiLCJpbnB1dElkIiwiaXNEaWFsb2dPcGVuIiwic2V0RGlhbG9nT3BlbiIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50IiwicmVuZGVyTW9iaWxlIiwic2V0SGlnaGxpZ2h0ZWRJbmRleCIsInVzZUNvbWJvYm94IiwiaW5wdXRWYWx1ZSIsImlzT3BlbiIsImNoYW5nZXMiLCJzZWxlY3RlZEl0ZW0iLCJkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCIsIm9uSW5wdXRWYWx1ZUNoYW5nZSIsInN0YXRlUmVkdWNlciIsIm9sZFN0YXRlIiwic3RhdGVDaGFuZ2VUeXBlcyIsIklucHV0S2V5RG93bkVzY2FwZSIsIklucHV0S2V5RG93bkVudGVyIiwiZW50ZXJQZW5kaW5nIiwiSW5wdXRCbHVyIiwiaXRlbVRvU3RyaW5nIiwic3VwcHJlc3NSZWZFcnJvciIsImFyaWFSZXF1aXJlZFRleHQiLCJTZWFyY2hCYXJJZCIsImFyaWFDdXJyZW50U3VnZ2VzdGlvbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJzaG91bGRSZXR1cm5Gb2N1c0FmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwicHJpbWFyeSIsImFjY2Vzc2libGVQcmltYXJ5IiwiaG92ZXIiLCJtZWRpdW0iLCJ0YWJJbmRleCIsIkRpYWxvZ01vZGFsIiwiaXNNb2RhbE9wZW4iLCJoYW5kbGVDbG9zZSIsImhlYWRlclRleHQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvblRleHQiLCJwcmltYXJ5QnV0dG9uT25DbGljayIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJzZWFyY2hSZWR1Y2VyIiwiYWN0aW9uIiwic2hvd093blBsYWNlcyIsInBlbmRpbmdTZWxlY3Rpb24iLCJpc0NsZWFyZWQiLCJpbml0aWFsU3RhdGUiLCJpc01lbnVPcGVuIiwicG9zaXRpb25zIiwiRFRBdXRvc3VnZ2VzdCIsIm9uU2VsZWN0IiwiaWNvbiIsIm9uQ2xlYXIiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwiaGFuZGxlVmlhUG9pbnRzIiwiZm9jdXNDaGFuZ2UiLCJzdG9yZVJlZiIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsIm1vZGVTZXQiLCJpc0VtYmVkZGVkIiwidXNlUmVkdWNlciIsImZldGNoU3VnZ2VzdGlvbnMiLCJpc0xvY2F0aW9uU2VhcmNoIiwibmV3VGFyZ2V0cyIsImdldE5ld1RhcmdldHMiLCJvd25QbGFjZXMiLCJ1c2VBbGwiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwibmV3U3VnZ2VzdGlvbnMiLCJ0cmFuc2xhdGVkU3VnZ2VzdGlvbiIsInNlbGVjdFN1Z2dlc3Rpb24iLCJibHVyIiwic2VsZWN0SXRlbSIsIm9wZW5NZW51IiwiY2xvc2VNZW51IiwiSXRlbUNsaWNrIiwiSW5wdXRDbGljayIsIm9uSXNPcGVuQ2hhbmdlIiwicGVuZGluZ0VudGVyIiwiYmFzZUl0ZW1Qcm9wcyIsImFyaWFGYXZvdXJpdGVTdHJpbmciLCJhcmlhTGFiZWxUZXh0IiwiZ2V0QXJpYVByb3BzIiwiYXJpYUJhcklkIiwiYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zIiwibW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJzZWxlY3Rpb24iLCJGcmFnbWVudCIsIm1vYmlsZUNsZWFyT2xkU2VhcmNoZXMiLCJjbGVhckZ1dHVyZVJvdXRlcyIsInJvdXRlc1ByZWZpeCIsInN0b3BzUHJlZml4IiwiZGVmYXVsdENvbG9ycyIsIkkxOG5leHRQcm92aWRlciJdLCJtYXBwaW5ncyI6Inl5REFBQSxTQUFTQSxFQUFRQyxHQUdmLE9BQU9ELEVBQVUsbUJBQXFCRSxRQUFVLGlCQUFtQkEsT0FBT0MsU0FBVyxTQUFVRixHQUM3RixjQUFjQSxDQUNmLEVBQUcsU0FBVUEsR0FDWixPQUFPQSxHQUFLLG1CQUFxQkMsUUFBVUQsRUFBRUcsY0FBZ0JGLFFBQVVELElBQU1DLE9BQU9HLFVBQVksZ0JBQWtCSixDQUN0SCxFQUFLRCxFQUFRQyxFQUNiLENDTkEsU0FBU0ssRUFBY0MsR0FDckIsSUFBSUMsRUNGTixTQUFxQkQsRUFBR0UsR0FDdEIsR0FBSSxVQUFZVCxFQUFRTyxLQUFPQSxFQUFHLE9BQU9BLEVBQ3pDLElBQUlHLEVBQUlILEVBQUVMLE9BQU9TLGFBQ2pCLFFBQVMsSUFBTUQsRUFBRyxDQUNoQixJQUFJRixFQUFJRSxFQUFFRSxLQUFLTCxFQUFHRSxHQUFLLFdBQ3ZCLEdBQUksVUFBWVQsRUFBUVEsR0FBSSxPQUFPQSxFQUNuQyxNQUFNLElBQUlLLFVBQVUsK0NBQ3JCLENBQ0QsT0FBUSxXQUFhSixFQUFJSyxPQUFTQyxRQUFRUixFQUM1QyxDRFBV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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,n,u,o,r,i,s,a,l,c,d,p,f,h,g,b,m,E,y,A,F,D){"use strict";function C(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=C(t),_=C(n),B=C(o),w=C(r),S=C(i),O=C(s),k=C(a),x=C(l),R=C(c),j=C(d),P=C(f),M=C(b),N=C(m),T=C(E),L=C(A),I=C(F),q=C(D);function z(e){return z="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},z(e)}function U(e){var t=function(e,t){if("object"!=z(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var u=n.call(e,t||"default");if("object"!=z(u))return u;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==z(t)?t:t+""}function H(e,t,n){return(t=U(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function V(e,t){return e&&t&&e===t}const W=["stop","station","favouriteStop","favouriteStation"],$=["favouriteVehicleRentalStation","bikestation"];function G(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function K(e,t){const n=e.properties,u=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,o=u.origin,r=u.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($.includes(n.layer)&&$.includes(u.layer)){return(n.gid||G(n.labelId))===(u.gid||G(u.labelId))}if(n.gtfsId&&u.gtfsId)return n.gtfsId===u.gtfsId;if(W.includes(n.layer)&&W.includes(u.layer)&&n.gid&&u.gid)return n.gid===u.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(n.name,u.name)||V(n.label,u.label)||V(n.address,u.address)||V(n.address,u.label)||V(n.label,u.address)))}const J=e=>k.default(e)?e.toLowerCase():"",Q=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),X=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),Z="back",Y="currentPosition",ee="favouriteStop",te="favouriteStation",ne="favouritePlace",ue="favouriteRoute",oe="favouriteVehicleRentalStation",re="futureRoute",ie="station",se="selectFromMap",ae="ownLocations",le="stop",ce="bikestation",de="carpark",pe="bikepark",fe=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,he=(e,t)=>{switch(e){case Y:return 1;case Z:return.9;case se:return.8;case ae:return.79;case te:case ne:case ee:case ue:case oe:return.45;case re:return.44;case ie:return k.default(t)&&0===t.indexOf("gtfs")?.43:.42;case de:case pe:case ce:return.38;case le:return.36;default:return.41}},ge=(e,t,n="")=>{if(!Array.isArray(t)||!t.length)return t;const u=t=>k.default(t)&&e&&e.test(t),o=J(n),r=u(o),i=x.default(t.filter(e=>e),[e=>r&&u(J(e.properties.shortName))&&0===J(e.properties.shortName).indexOf(o)?1:0,e=>{const{confidence:t,layer:n,source:u}=e.properties;if(0===o.length)return he(n,u);if(!t)return he(n,u)+((e,t)=>k.default(e)&&0!==e.length?["name","label","address","shortName"].map(e=>({name:e,value:t[e]})).filter(e=>k.default(e.value)&&e.value.length>0).map(t=>{let n=J(t.value);return 0===n.indexOf(e)?("shortName"===t.name&&X(n)&&([n]=Q(n)),.5+e.length/n.length):.5*e.length/(e.length+1)}).reduce((e,t)=>t>e?t:e,0):0)(o,e.properties);switch(n){case ie:return t+(0===u.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 X(e.properties.shortName)?Q(e.properties.shortName)[0]:e.properties.shortName},e=>{if(e.properties.shortName)return X(e.properties.shortName)?Q(e.properties.shortName)[1]:e.properties.shortName},"properties.longName"],["desc","desc","asc","asc","asc"]);return R.default(i,K)},be=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function me(e,t,n){if("string"==typeof t&&t.length>0){const u=t.toLowerCase().trim(),o=u.includes(" ")||u.includes(",");return e.filter(e=>{let t=[];n.forEach(n=>{let u=j.default(e,n);o||"properties.label"!==n&&"address"!==n||!u||(u=u.split(","),u.length>2?u.splice(u.length-2,2):u.length>1&&u.splice(u.length-1,1),u=u.join(",")),u&&(t=o?t.concat(u.toLowerCase()):t.concat(u.toLowerCase().replace(/,/g," ").split(" ")))});for(let e=0;e<t.length;e++)if(0===t[e].indexOf(u))return!0;return!1})}return e}function Ee(e,t){return function(){return e.apply(t,arguments)}}const{toString:ye}=Object.prototype,{getPrototypeOf:Ae}=Object,{iterator:Fe,toStringTag:De}=Symbol,Ce=(ve=Object.create(null),e=>{const t=ye.call(e);return ve[t]||(ve[t]=t.slice(8,-1).toLowerCase())});var ve;const _e=e=>(e=e.toLowerCase(),t=>Ce(t)===e),Be=e=>t=>typeof t===e,{isArray:we}=Array,Se=Be("undefined");function Oe(e){return null!==e&&!Se(e)&&null!==e.constructor&&!Se(e.constructor)&&Re(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const ke=_e("ArrayBuffer");const xe=Be("string"),Re=Be("function"),je=Be("number"),Pe=e=>null!==e&&"object"==typeof e,Me=e=>{if("object"!==Ce(e))return!1;const t=Ae(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||De in e||Fe in e)},Ne=_e("Date"),Te=_e("File"),Le=_e("Blob"),Ie=_e("FileList");const qe="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},ze=void 0!==qe.FormData?qe.FormData:void 0,Ue=_e("URLSearchParams"),[He,Ve,We,$e]=["ReadableStream","Request","Response","Headers"].map(_e);function Ge(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let u,o;if("object"!=typeof e&&(e=[e]),we(e))for(u=0,o=e.length;u<o;u++)t.call(null,e[u],u,e);else{if(Oe(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),r=o.length;let i;for(u=0;u<r;u++)i=o[u],t.call(null,e[i],i,e)}}function Ke(e,t){if(Oe(e))return null;t=t.toLowerCase();const n=Object.keys(e);let u,o=n.length;for(;o-- >0;)if(u=n[o],t===u.toLowerCase())return u;return null}const Je="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Qe=e=>!Se(e)&&e!==Je;const Xe=(Ze="undefined"!=typeof Uint8Array&&Ae(Uint8Array),e=>Ze&&e instanceof Ze);var Ze;const Ye=_e("HTMLFormElement"),et=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),tt=_e("RegExp"),nt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),u={};Ge(n,(n,o)=>{let r;!1!==(r=t(n,o,e))&&(u[o]=r||n)}),Object.defineProperties(e,u)};const ut=_e("AsyncFunction"),ot=(rt="function"==typeof setImmediate,it=Re(Je.postMessage),rt?setImmediate:it?(st=`axios@${Math.random()}`,at=[],Je.addEventListener("message",({source:e,data:t})=>{e===Je&&t===st&&at.length&&at.shift()()},!1),e=>{at.push(e),Je.postMessage(st,"*")}):e=>setTimeout(e));var rt,it,st,at;const lt="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Je):"undefined"!=typeof process&&process.nextTick||ot;var ct={isArray:we,isArrayBuffer:ke,isBuffer:Oe,isFormData:e=>{let t;return e&&(ze&&e instanceof ze||Re(e.append)&&("formdata"===(t=Ce(e))||"object"===t&&Re(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&ke(e.buffer),t},isString:xe,isNumber:je,isBoolean:e=>!0===e||!1===e,isObject:Pe,isPlainObject:Me,isEmptyObject:e=>{if(!Pe(e)||Oe(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:He,isRequest:Ve,isResponse:We,isHeaders:$e,isUndefined:Se,isDate:Ne,isFile:Te,isReactNativeBlob:e=>!(!e||void 0===e.uri),isReactNative:e=>e&&void 0!==e.getParts,isBlob:Le,isRegExp:tt,isFunction:Re,isStream:e=>Pe(e)&&Re(e.pipe),isURLSearchParams:Ue,isTypedArray:Xe,isFileList:Ie,forEach:Ge,merge:function e(){const{caseless:t,skipUndefined:n}=Qe(this)&&this||{},u={},o=(o,r)=>{if("__proto__"===r||"constructor"===r||"prototype"===r)return;const i=t&&Ke(u,r)||r;Me(u[i])&&Me(o)?u[i]=e(u[i],o):Me(o)?u[i]=e({},o):we(o)?u[i]=o.slice():n&&Se(o)||(u[i]=o)};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&Ge(arguments[e],o);return u},extend:(e,t,n,{allOwnKeys:u}={})=>(Ge(t,(t,u)=>{n&&Re(t)?Object.defineProperty(e,u,{value:Ee(t,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,u,{value:t,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:u}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,u)=>{e.prototype=Object.create(t.prototype,u),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,u)=>{let o,r,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),r=o.length;r-- >0;)i=o[r],u&&!u(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&Ae(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:Ce,kindOfTest:_e,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const u=e.indexOf(t,n);return-1!==u&&u===n},toArray:e=>{if(!e)return null;if(we(e))return e;let t=e.length;if(!je(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Fe]).call(e);let u;for(;(u=n.next())&&!u.done;){const n=u.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const u=[];for(;null!==(n=e.exec(t));)u.push(n);return u},isHTMLForm:Ye,hasOwnProperty:et,hasOwnProp:et,reduceDescriptors:nt,freezeMethods:e=>{nt(e,(t,n)=>{if(Re(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const u=e[n];Re(u)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},u=e=>{e.forEach(e=>{n[e]=!0})};return we(e)?u(e):u(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:Ke,global:Je,isContextDefined:Qe,isSpecCompliantForm:function(e){return!!(e&&Re(e.append)&&"FormData"===e[De]&&e[Fe])},toJSONObject:e=>{const t=new Array(10),n=(e,u)=>{if(Pe(e)){if(t.indexOf(e)>=0)return;if(Oe(e))return e;if(!("toJSON"in e)){t[u]=e;const o=we(e)?[]:{};return Ge(e,(e,t)=>{const r=n(e,u+1);!Se(r)&&(o[t]=r)}),t[u]=void 0,o}}return e};return n(e,0)},isAsyncFn:ut,isThenable:e=>e&&(Pe(e)||Re(e))&&Re(e.then)&&Re(e.catch),setImmediate:ot,asap:lt,isIterable:e=>null!=e&&Re(e[Fe])};class dt extends Error{static from(e,t,n,u,o,r){const i=new dt(e.message,t||e.code,n,u,o);return i.cause=e,i.name=e.name,null!=e.status&&null==i.status&&(i.status=e.status),r&&Object.assign(i,r),i}constructor(e,t,n,u,o){super(e),Object.defineProperty(this,"message",{value:e,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,t&&(this.code=t),n&&(this.config=n),u&&(this.request=u),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:ct.toJSONObject(this.config),code:this.code,status:this.status}}}dt.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",dt.ERR_BAD_OPTION="ERR_BAD_OPTION",dt.ECONNABORTED="ECONNABORTED",dt.ETIMEDOUT="ETIMEDOUT",dt.ERR_NETWORK="ERR_NETWORK",dt.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",dt.ERR_DEPRECATED="ERR_DEPRECATED",dt.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",dt.ERR_BAD_REQUEST="ERR_BAD_REQUEST",dt.ERR_CANCELED="ERR_CANCELED",dt.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",dt.ERR_INVALID_URL="ERR_INVALID_URL";var pt=dt;function ft(e){return ct.isPlainObject(e)||ct.isArray(e)}function ht(e){return ct.endsWith(e,"[]")?e.slice(0,-2):e}function gt(e,t,n){return e?e.concat(t).map(function(e,t){return e=ht(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const bt=ct.toFlatObject(ct,{},null,function(e){return/^is[A-Z]/.test(e)});function mt(e,t,n){if(!ct.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const u=(n=ct.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!ct.isUndefined(t[e])})).metaTokens,o=n.visitor||l,r=n.dots,i=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&ct.isSpecCompliantForm(t);if(!ct.isFunction(o))throw new TypeError("visitor must be a function");function a(e){if(null===e)return"";if(ct.isDate(e))return e.toISOString();if(ct.isBoolean(e))return e.toString();if(!s&&ct.isBlob(e))throw new pt("Blob is not supported. Use a Buffer instead.");return ct.isArrayBuffer(e)||ct.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,o){let s=e;if(ct.isReactNative(t)&&ct.isReactNativeBlob(e))return t.append(gt(o,n,r),a(e)),!1;if(e&&!o&&"object"==typeof e)if(ct.endsWith(n,"{}"))n=u?n:n.slice(0,-2),e=JSON.stringify(e);else if(ct.isArray(e)&&function(e){return ct.isArray(e)&&!e.some(ft)}(e)||(ct.isFileList(e)||ct.endsWith(n,"[]"))&&(s=ct.toArray(e)))return n=ht(n),s.forEach(function(e,u){!ct.isUndefined(e)&&null!==e&&t.append(!0===i?gt([n],u,r):null===i?n:n+"[]",a(e))}),!1;return!!ft(e)||(t.append(gt(o,n,r),a(e)),!1)}const c=[],d=Object.assign(bt,{defaultVisitor:l,convertValue:a,isVisitable:ft});if(!ct.isObject(e))throw new TypeError("data must be an object");return function e(n,u){if(!ct.isUndefined(n)){if(-1!==c.indexOf(n))throw Error("Circular reference detected in "+u.join("."));c.push(n),ct.forEach(n,function(n,r){!0===(!(ct.isUndefined(n)||null===n)&&o.call(t,n,ct.isString(r)?r.trim():r,u,d))&&e(n,u?u.concat(r):[r])}),c.pop()}}(e),t}function Et(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function yt(e,t){this._pairs=[],e&&mt(e,this,t)}const At=yt.prototype;function Ft(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Dt(e,t,n){if(!t)return e;const u=n&&n.encode||Ft,o=ct.isFunction(n)?{serialize:n}:n,r=o&&o.serialize;let i;if(i=r?r(t,o):ct.isURLSearchParams(t)?t.toString():new yt(t,o).toString(u),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}At.append=function(e,t){this._pairs.push([e,t])},At.toString=function(e){const t=e?function(t){return e.call(this,t,Et)}:Et;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var Ct=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){ct.forEach(this.handlers,function(t){null!==t&&e(t)})}},vt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},_t={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:yt,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const Bt="undefined"!=typeof window&&"undefined"!=typeof document,wt="object"==typeof navigator&&navigator||void 0,St=Bt&&(!wt||["ReactNative","NativeScript","NS"].indexOf(wt.product)<0),Ot="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,kt=Bt&&window.location.href||"http://localhost";var xt={...Object.freeze({__proto__:null,hasBrowserEnv:Bt,hasStandardBrowserWebWorkerEnv:Ot,hasStandardBrowserEnv:St,navigator:wt,origin:kt}),..._t};function Rt(e){function t(e,n,u,o){let r=e[o++];if("__proto__"===r)return!0;const i=Number.isFinite(+r),s=o>=e.length;if(r=!r&&ct.isArray(u)?u.length:r,s)return ct.hasOwnProp(u,r)?u[r]=[u[r],n]:u[r]=n,!i;u[r]&&ct.isObject(u[r])||(u[r]=[]);return t(e,n,u[r],o)&&ct.isArray(u[r])&&(u[r]=function(e){const t={},n=Object.keys(e);let u;const o=n.length;let r;for(u=0;u<o;u++)r=n[u],t[r]=e[r];return t}(u[r])),!i}if(ct.isFormData(e)&&ct.isFunction(e.entries)){const n={};return ct.forEachEntry(e,(e,u)=>{t(function(e){return ct.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),u,n,0)}),n}return null}const jt={transitional:vt,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",u=n.indexOf("application/json")>-1,o=ct.isObject(e);o&&ct.isHTMLForm(e)&&(e=new FormData(e));if(ct.isFormData(e))return u?JSON.stringify(Rt(e)):e;if(ct.isArrayBuffer(e)||ct.isBuffer(e)||ct.isStream(e)||ct.isFile(e)||ct.isBlob(e)||ct.isReadableStream(e))return e;if(ct.isArrayBufferView(e))return e.buffer;if(ct.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let r;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return mt(e,new xt.classes.URLSearchParams,{visitor:function(e,t,n,u){return xt.isNode&&ct.isBuffer(e)?(this.append(t,e.toString("base64")),!1):u.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((r=ct.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return mt(r?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||u?(t.setContentType("application/json",!1),function(e,t,n){if(ct.isString(e))try{return(t||JSON.parse)(e),ct.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||jt.transitional,n=t&&t.forcedJSONParsing,u="json"===this.responseType;if(ct.isResponse(e)||ct.isReadableStream(e))return e;if(e&&ct.isString(e)&&(n&&!this.responseType||u)){const n=!(t&&t.silentJSONParsing)&&u;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n){if("SyntaxError"===e.name)throw pt.from(e,pt.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:xt.classes.FormData,Blob:xt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};ct.forEach(["delete","get","head","post","put","patch"],e=>{jt.headers[e]={}});var Pt=jt;const Mt=ct.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Nt=Symbol("internals");function Tt(e,t){if(!1!==e&&null!=e)if(ct.isArray(e))e.forEach(e=>Tt(e,t));else if(!(e=>!/[\r\n]/.test(e))(String(e)))throw new Error(`Invalid character in header content ["${t}"]`)}function Lt(e){return e&&String(e).trim().toLowerCase()}function It(e){return!1===e||null==e?e:ct.isArray(e)?e.map(It):function(e){let t=e.length;for(;t>0;){const n=e.charCodeAt(t-1);if(10!==n&&13!==n)break;t-=1}return t===e.length?e:e.slice(0,t)}(String(e))}function qt(e,t,n,u,o){return ct.isFunction(u)?u.call(this,t,n):(o&&(t=n),ct.isString(t)?ct.isString(u)?-1!==t.indexOf(u):ct.isRegExp(u)?u.test(t):void 0:void 0)}class zt{constructor(e){e&&this.set(e)}set(e,t,n){const u=this;function o(e,t,n){const o=Lt(t);if(!o)throw new Error("header name must be a non-empty string");const r=ct.findKey(u,o);(!r||void 0===u[r]||!0===n||void 0===n&&!1!==u[r])&&(Tt(e,t),u[r||t]=It(e))}const r=(e,t)=>ct.forEach(e,(e,n)=>o(e,n,t));if(ct.isPlainObject(e)||e instanceof this.constructor)r(e,t);else if(ct.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))r((e=>{const t={};let n,u,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),u=e.substring(o+1).trim(),!n||t[n]&&Mt[n]||("set-cookie"===n?t[n]?t[n].push(u):t[n]=[u]:t[n]=t[n]?t[n]+", "+u:u)}),t})(e),t);else if(ct.isObject(e)&&ct.isIterable(e)){let n,u,o={};for(const t of e){if(!ct.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[u=t[0]]=(n=o[u])?ct.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}r(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=Lt(e)){const n=ct.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let u;for(;u=n.exec(e);)t[u[1]]=u[2];return t}(e);if(ct.isFunction(t))return t.call(this,e,n);if(ct.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Lt(e)){const n=ct.findKey(this,e);return!(!n||void 0===this[n]||t&&!qt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let u=!1;function o(e){if(e=Lt(e)){const o=ct.findKey(n,e);!o||t&&!qt(0,n[o],o,t)||(delete n[o],u=!0)}}return ct.isArray(e)?e.forEach(o):o(e),u}clear(e){const t=Object.keys(this);let n=t.length,u=!1;for(;n--;){const o=t[n];e&&!qt(0,this[o],o,e,!0)||(delete this[o],u=!0)}return u}normalize(e){const t=this,n={};return ct.forEach(this,(u,o)=>{const r=ct.findKey(n,o);if(r)return t[r]=It(u),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=It(u),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return ct.forEach(this,(n,u)=>{null!=n&&!1!==n&&(t[u]=e&&ct.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[Nt]=this[Nt]={accessors:{}}).accessors,n=this.prototype;function u(e){const u=Lt(e);t[u]||(!function(e,t){const n=ct.toCamelCase(" "+t);["get","set","has"].forEach(u=>{Object.defineProperty(e,u+n,{value:function(e,n,o){return this[u].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[u]=!0)}return ct.isArray(e)?e.forEach(u):u(e),this}}zt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),ct.reduceDescriptors(zt.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),ct.freezeMethods(zt);var Ut=zt;function Ht(e,t){const n=this||Pt,u=t||n,o=Ut.from(u.headers);let r=u.data;return ct.forEach(e,function(e){r=e.call(n,r,o.normalize(),t?t.status:void 0)}),o.normalize(),r}function Vt(e){return!(!e||!e.__CANCEL__)}var Wt=class extends pt{constructor(e,t,n){super(null==e?"canceled":e,pt.ERR_CANCELED,t,n),this.name="CanceledError",this.__CANCEL__=!0}};function $t(e,t,n){const u=n.config.validateStatus;n.status&&u&&!u(n.status)?t(new pt("Request failed with status code "+n.status,[pt.ERR_BAD_REQUEST,pt.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const Gt=(e,t,n=3)=>{let u=0;const o=function(e,t){e=e||10;const n=new Array(e),u=new Array(e);let o,r=0,i=0;return t=void 0!==t?t:1e3,function(s){const a=Date.now(),l=u[i];o||(o=a),n[r]=s,u[r]=a;let c=i,d=0;for(;c!==r;)d+=n[c++],c%=e;if(r=(r+1)%e,r===i&&(i=(i+1)%e),a-o<t)return;const p=l&&a-l;return p?Math.round(1e3*d/p):void 0}}(50,250);return function(e,t){let n,u,o=0,r=1e3/t;const i=(t,r=Date.now())=>{o=r,n=null,u&&(clearTimeout(u),u=null),e(...t)};return[(...e)=>{const t=Date.now(),s=t-o;s>=r?i(e,t):(n=e,u||(u=setTimeout(()=>{u=null,i(n)},r-s)))},()=>n&&i(n)]}(n=>{const r=n.loaded,i=n.lengthComputable?n.total:void 0,s=r-u,a=o(s);u=r;e({loaded:r,total:i,progress:i?r/i:void 0,bytes:s,rate:a||void 0,estimated:a&&i&&r<=i?(i-r)/a:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},Kt=(e,t)=>{const n=null!=e;return[u=>t[0]({lengthComputable:n,total:e,loaded:u}),t[1]]},Jt=e=>(...t)=>ct.asap(()=>e(...t));var Qt=xt.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,xt.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(xt.origin),xt.navigator&&/(msie|trident)/i.test(xt.navigator.userAgent)):()=>!0,Xt=xt.hasStandardBrowserEnv?{write(e,t,n,u,o,r,i){if("undefined"==typeof document)return;const s=[`${e}=${encodeURIComponent(t)}`];ct.isNumber(n)&&s.push(`expires=${new Date(n).toUTCString()}`),ct.isString(u)&&s.push(`path=${u}`),ct.isString(o)&&s.push(`domain=${o}`),!0===r&&s.push("secure"),ct.isString(i)&&s.push(`SameSite=${i}`),document.cookie=s.join("; ")},read(e){if("undefined"==typeof document)return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function Zt(e,t,n){let u=!("string"==typeof(o=t)&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o));var o;return e&&(u||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Yt=e=>e instanceof Ut?{...e}:e;function en(e,t){t=t||{};const n={};function u(e,t,n,u){return ct.isPlainObject(e)&&ct.isPlainObject(t)?ct.merge.call({caseless:u},e,t):ct.isPlainObject(t)?ct.merge({},t):ct.isArray(t)?t.slice():t}function o(e,t,n,o){return ct.isUndefined(t)?ct.isUndefined(e)?void 0:u(void 0,e,0,o):u(e,t,0,o)}function r(e,t){if(!ct.isUndefined(t))return u(void 0,t)}function i(e,t){return ct.isUndefined(t)?ct.isUndefined(e)?void 0:u(void 0,e):u(void 0,t)}function s(n,o,r){return r in t?u(n,o):r in e?u(void 0,n):void 0}const a={url:r,method:r,data:r,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(Yt(e),Yt(t),0,!0)};return ct.forEach(Object.keys({...e,...t}),function(u){if("__proto__"===u||"constructor"===u||"prototype"===u)return;const r=ct.hasOwnProp(a,u)?a[u]:o,i=r(e[u],t[u],u);ct.isUndefined(i)&&r!==s||(n[u]=i)}),n}var tn=e=>{const t=en({},e);let{data:n,withXSRFToken:u,xsrfHeaderName:o,xsrfCookieName:r,headers:i,auth:s}=t;if(t.headers=i=Ut.from(i),t.url=Dt(Zt(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),s&&i.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):""))),ct.isFormData(n))if(xt.hasStandardBrowserEnv||xt.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(ct.isFunction(n.getHeaders)){const e=n.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach(([e,n])=>{t.includes(e.toLowerCase())&&i.set(e,n)})}if(xt.hasStandardBrowserEnv&&(u&&ct.isFunction(u)&&(u=u(t)),u||!1!==u&&Qt(t.url))){const e=o&&r&&Xt.read(r);e&&i.set(o,e)}return t};var nn="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const u=tn(e);let o=u.data;const r=Ut.from(u.headers).normalize();let i,s,a,l,c,{responseType:d,onUploadProgress:p,onDownloadProgress:f}=u;function h(){l&&l(),c&&c(),u.cancelToken&&u.cancelToken.unsubscribe(i),u.signal&&u.signal.removeEventListener("abort",i)}let g=new XMLHttpRequest;function b(){if(!g)return;const u=Ut.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders());$t(function(e){t(e),h()},function(e){n(e),h()},{data:d&&"text"!==d&&"json"!==d?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:u,config:e,request:g}),g=null}g.open(u.method.toUpperCase(),u.url,!0),g.timeout=u.timeout,"onloadend"in g?g.onloadend=b:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(b)},g.onabort=function(){g&&(n(new pt("Request aborted",pt.ECONNABORTED,e,g)),g=null)},g.onerror=function(t){const u=t&&t.message?t.message:"Network Error",o=new pt(u,pt.ERR_NETWORK,e,g);o.event=t||null,n(o),g=null},g.ontimeout=function(){let t=u.timeout?"timeout of "+u.timeout+"ms exceeded":"timeout exceeded";const o=u.transitional||vt;u.timeoutErrorMessage&&(t=u.timeoutErrorMessage),n(new pt(t,o.clarifyTimeoutError?pt.ETIMEDOUT:pt.ECONNABORTED,e,g)),g=null},void 0===o&&r.setContentType(null),"setRequestHeader"in g&&ct.forEach(r.toJSON(),function(e,t){g.setRequestHeader(t,e)}),ct.isUndefined(u.withCredentials)||(g.withCredentials=!!u.withCredentials),d&&"json"!==d&&(g.responseType=u.responseType),f&&([a,c]=Gt(f,!0),g.addEventListener("progress",a)),p&&g.upload&&([s,l]=Gt(p),g.upload.addEventListener("progress",s),g.upload.addEventListener("loadend",l)),(u.cancelToken||u.signal)&&(i=t=>{g&&(n(!t||t.type?new Wt(null,e,g):t),g.abort(),g=null)},u.cancelToken&&u.cancelToken.subscribe(i),u.signal&&(u.signal.aborted?i():u.signal.addEventListener("abort",i)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(u.url);m&&-1===xt.protocols.indexOf(m)?n(new pt("Unsupported protocol "+m+":",pt.ERR_BAD_REQUEST,e)):g.send(o||null)})};var un=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,u=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;u.abort(t instanceof pt?t:new Wt(t instanceof Error?t.message:t))}};let r=t&&setTimeout(()=>{r=null,o(new pt(`timeout of ${t}ms exceeded`,pt.ETIMEDOUT))},t);const i=()=>{e&&(r&&clearTimeout(r),r=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:s}=u;return s.unsubscribe=()=>ct.asap(i),s}};const on=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let u,o=0;for(;o<n;)u=o+t,yield e.slice(o,u),o=u},rn=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},sn=(e,t,n,u)=>{const o=async function*(e,t){for await(const n of rn(e))yield*on(n,t)}(e,t);let r,i=0,s=e=>{r||(r=!0,u&&u(e))};return new ReadableStream({async pull(e){try{const{done:t,value:u}=await o.next();if(t)return s(),void e.close();let r=u.byteLength;if(n){let e=i+=r;n(e)}e.enqueue(new Uint8Array(u))}catch(e){throw s(e),e}},cancel:e=>(s(e),o.return())},{highWaterMark:2})},{isFunction:an}=ct,ln=(({Request:e,Response:t})=>({Request:e,Response:t}))(ct.global),{ReadableStream:cn,TextEncoder:dn}=ct.global,pn=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},fn=e=>{e=ct.merge.call({skipUndefined:!0},ln,e);const{fetch:t,Request:n,Response:u}=e,o=t?an(t):"function"==typeof fetch,r=an(n),i=an(u);if(!o)return!1;const s=o&&an(cn),a=o&&("function"==typeof dn?(l=new dn,e=>l.encode(e)):async e=>new Uint8Array(await new n(e).arrayBuffer()));var l;const c=r&&s&&pn(()=>{let e=!1;const t=new cn,u=new n(xt.origin,{body:t,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return t.cancel(),e&&!u}),d=i&&s&&pn(()=>ct.isReadableStream(new u("").body)),p={stream:d&&(e=>e.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!p[e]&&(p[e]=(t,n)=>{let u=t&&t[e];if(u)return u.call(t);throw new pt(`Response type '${e}' is not supported`,pt.ERR_NOT_SUPPORT,n)})});const f=async(e,t)=>{const u=ct.toFiniteNumber(e.getContentLength());return null==u?(async e=>{if(null==e)return 0;if(ct.isBlob(e))return e.size;if(ct.isSpecCompliantForm(e)){const t=new n(xt.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return ct.isArrayBufferView(e)||ct.isArrayBuffer(e)?e.byteLength:(ct.isURLSearchParams(e)&&(e+=""),ct.isString(e)?(await a(e)).byteLength:void 0)})(t):u};return async e=>{let{url:o,method:i,data:s,signal:a,cancelToken:l,timeout:h,onDownloadProgress:g,onUploadProgress:b,responseType:m,headers:E,withCredentials:y="same-origin",fetchOptions:A}=tn(e),F=t||fetch;m=m?(m+"").toLowerCase():"text";let D=un([a,l&&l.toAbortSignal()],h),C=null;const v=D&&D.unsubscribe&&(()=>{D.unsubscribe()});let _;try{if(b&&c&&"get"!==i&&"head"!==i&&0!==(_=await f(E,s))){let e,t=new n(o,{method:"POST",body:s,duplex:"half"});if(ct.isFormData(s)&&(e=t.headers.get("content-type"))&&E.setContentType(e),t.body){const[e,n]=Kt(_,Gt(Jt(b)));s=sn(t.body,65536,e,n)}}ct.isString(y)||(y=y?"include":"omit");const t=r&&"credentials"in n.prototype,a={...A,signal:D,method:i.toUpperCase(),headers:E.normalize().toJSON(),body:s,duplex:"half",credentials:t?y:void 0};C=r&&new n(o,a);let l=await(r?F(C,A):F(o,a));const h=d&&("stream"===m||"response"===m);if(d&&(g||h&&v)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=l[t]});const t=ct.toFiniteNumber(l.headers.get("content-length")),[n,o]=g&&Kt(t,Gt(Jt(g),!0))||[];l=new u(sn(l.body,65536,n,()=>{o&&o(),v&&v()}),e)}m=m||"text";let B=await p[ct.findKey(p,m)||"text"](l,e);return!h&&v&&v(),await new Promise((t,n)=>{$t(t,n,{data:B,headers:Ut.from(l.headers),status:l.status,statusText:l.statusText,config:e,request:C})})}catch(t){if(v&&v(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new pt("Network Error",pt.ERR_NETWORK,e,C,t&&t.response),{cause:t.cause||t});throw pt.from(t,t&&t.code,e,C,t&&t.response)}}},hn=new Map,gn=e=>{let t=e&&e.env||{};const{fetch:n,Request:u,Response:o}=t,r=[u,o,n];let i,s,a=r.length,l=hn;for(;a--;)i=r[a],s=l.get(i),void 0===s&&l.set(i,s=a?new Map:fn(t)),l=s;return s};gn();const bn={http:null,xhr:nn,fetch:{get:gn}};ct.forEach(bn,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const mn=e=>`- ${e}`,En=e=>ct.isFunction(e)||null===e||!1===e;var yn={getAdapter:function(e,t){e=ct.isArray(e)?e:[e];const{length:n}=e;let u,o;const r={};for(let i=0;i<n;i++){let n;if(u=e[i],o=u,!En(u)&&(o=bn[(n=String(u)).toLowerCase()],void 0===o))throw new pt(`Unknown adapter '${n}'`);if(o&&(ct.isFunction(o)||(o=o.get(t))))break;r[n||"#"+i]=o}if(!o){const e=Object.entries(r).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let t=n?e.length>1?"since :\n"+e.map(mn).join("\n"):" "+mn(e[0]):"as no adapter specified";throw new pt("There is no suitable adapter to dispatch the request "+t,"ERR_NOT_SUPPORT")}return o},adapters:bn};function An(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Wt(null,e)}function Fn(e){An(e),e.headers=Ut.from(e.headers),e.data=Ht.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return yn.getAdapter(e.adapter||Pt.adapter,e)(e).then(function(t){return An(e),t.data=Ht.call(e,e.transformResponse,t),t.headers=Ut.from(t.headers),t},function(t){return Vt(t)||(An(e),t&&t.response&&(t.response.data=Ht.call(e,e.transformResponse,t.response),t.response.headers=Ut.from(t.response.headers))),Promise.reject(t)})}const Dn="1.15.0",Cn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Cn[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const vn={};Cn.transitional=function(e,t,n){function u(e,t){return"[Axios v"+Dn+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,r)=>{if(!1===e)throw new pt(u(o," has been removed"+(t?" in "+t:"")),pt.ERR_DEPRECATED);return t&&!vn[o]&&(vn[o]=!0,console.warn(u(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,r)}},Cn.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var _n={assertOptions:function(e,t,n){if("object"!=typeof e)throw new pt("options must be an object",pt.ERR_BAD_OPTION_VALUE);const u=Object.keys(e);let o=u.length;for(;o-- >0;){const r=u[o],i=t[r];if(i){const t=e[r],n=void 0===t||i(t,r,e);if(!0!==n)throw new pt("option "+r+" must be "+n,pt.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new pt("Unknown option "+r,pt.ERR_BAD_OPTION)}},validators:Cn};const Bn=_n.validators;class wn{constructor(e){this.defaults=e||{},this.interceptors={request:new Ct,response:new Ct}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=(()=>{if(!t.stack)return"";const e=t.stack.indexOf("\n");return-1===e?"":t.stack.slice(e+1)})();try{if(e.stack){if(n){const t=n.indexOf("\n"),u=-1===t?-1:n.indexOf("\n",t+1),o=-1===u?"":n.slice(u+1);String(e.stack).endsWith(o)||(e.stack+="\n"+n)}}else e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=en(this.defaults,t);const{transitional:n,paramsSerializer:u,headers:o}=t;void 0!==n&&_n.assertOptions(n,{silentJSONParsing:Bn.transitional(Bn.boolean),forcedJSONParsing:Bn.transitional(Bn.boolean),clarifyTimeoutError:Bn.transitional(Bn.boolean),legacyInterceptorReqResOrdering:Bn.transitional(Bn.boolean)},!1),null!=u&&(ct.isFunction(u)?t.paramsSerializer={serialize:u}:_n.assertOptions(u,{encode:Bn.function,serialize:Bn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),_n.assertOptions(t,{baseUrl:Bn.spelling("baseURL"),withXsrfToken:Bn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let r=o&&ct.merge(o.common,o[t.method]);o&&ct.forEach(["delete","get","head","post","put","patch","common"],e=>{delete o[e]}),t.headers=Ut.concat(r,o);const i=[];let s=!0;this.interceptors.request.forEach(function(e){if("function"==typeof e.runWhen&&!1===e.runWhen(t))return;s=s&&e.synchronous;const n=t.transitional||vt;n&&n.legacyInterceptorReqResOrdering?i.unshift(e.fulfilled,e.rejected):i.push(e.fulfilled,e.rejected)});const a=[];let l;this.interceptors.response.forEach(function(e){a.push(e.fulfilled,e.rejected)});let c,d=0;if(!s){const e=[Fn.bind(this),void 0];for(e.unshift(...i),e.push(...a),c=e.length,l=Promise.resolve(t);d<c;)l=l.then(e[d++],e[d++]);return l}c=i.length;let p=t;for(;d<c;){const e=i[d++],t=i[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{l=Fn.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,c=a.length;d<c;)l=l.then(a[d++],a[d++]);return l}getUri(e){return Dt(Zt((e=en(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}ct.forEach(["delete","get","head","options"],function(e){wn.prototype[e]=function(t,n){return this.request(en(n||{},{method:e,url:t,data:(n||{}).data}))}}),ct.forEach(["post","put","patch"],function(e){function t(t){return function(n,u,o){return this.request(en(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:u}))}}wn.prototype[e]=t(),wn.prototype[e+"Form"]=t(!0)});var Sn=wn;class On{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const u=new Promise(e=>{n.subscribe(e),t=e}).then(e);return u.cancel=function(){n.unsubscribe(t)},u},e(function(e,u,o){n.reason||(n.reason=new Wt(e,u,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new On(function(t){e=t}),cancel:e}}}var kn=On;const xn={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(xn).forEach(([e,t])=>{xn[t]=e});var Rn=xn;const jn=function e(t){const n=new Sn(t),u=Ee(Sn.prototype.request,n);return ct.extend(u,Sn.prototype,n,{allOwnKeys:!0}),ct.extend(u,n,null,{allOwnKeys:!0}),u.create=function(n){return e(en(t,n))},u}(Pt);jn.Axios=Sn,jn.CanceledError=Wt,jn.CancelToken=kn,jn.isCancel=Vt,jn.VERSION=Dn,jn.toFormData=mt,jn.AxiosError=pt,jn.Cancel=jn.CanceledError,jn.all=function(e){return Promise.all(e)},jn.spread=function(e){return function(t){return e.apply(null,t)}},jn.isAxiosError=function(e){return ct.isObject(e)&&!0===e.isAxiosError},jn.mergeConfig=en,jn.AxiosHeaders=Ut,jn.formToJSON=e=>Rt(ct.isHTMLForm(e)?new FormData(e):e),jn.getAdapter=yn.getAdapter,jn.HttpStatusCode=Rn,jn.default=jn;var Pn=jn;function Mn(e,t){return e?Object.keys(e).map(n=>{const u=t||n,o=e[n];return"object"==typeof o?Mn(o,u):`${encodeURIComponent(u)}=${encodeURIComponent(o)}`}).join("&"):""}function Nn(e,t){return Pn.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+Mn(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then(e=>e.data)}function Tn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Ln(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Tn(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function In(e,t,n,u,o,r,i,s){const a=e?e.trim():null;if(null==a||a.length<1||i&&!i.test(a))return Promise.resolve([]);const l=r||"https://api.digitransit.fi/geocoding/v1/search";let c=Ln(Ln(Ln({text:a},t),u),{},{lang:n});if(o&&(c=Ln(Ln({},c),{},{sources:o})),s){const e=s.toString();c=Ln(Ln({},c),{},{layers:e})}return Nn(l,c).then(e=>e.features)}function qn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function zn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qn(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Un(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const u=e.map(e=>{const t="stop"===e.type?"stop":"station";let u=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(u+=`#${e.code}`),n+=`${u},`,zn(zn({},e),{},{gid:u})}).reduce(function(e,t){return e[t.gid]=t,e},{});return Nn(t,{ids:n.slice(0,-1)}).then(e=>e.features.map(e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:u[e.properties.gid].gid,code:u[e.properties.gid].code,gtfsId:u[e.properties.gid].gtfsId,lastUpdated:u[e.properties.gid].lastUpdated,favouriteId:u[e.properties.gid].favouriteId,address:e.properties.label,layer:fe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))}function Hn(e,t,n){let u=me(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(u=u.filter(e=>!n.includes(e.properties.layer))),Promise.resolve(O.default(u,10).map(e=>{const t=zn(zn({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t}))}const Vn=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],Wn=["venue","address","street"],$n=["carpark","bikepark"],Gn=["stop","station"];const Kn=w.default(function(e,t,n,u,o,r,{input:i},s,a,l){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:f,parkingAreaSources:h,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:E,getFavouriteRoutesQuery:y,getFavouriteRoutes:A,getRoutesQuery:F,context:D,isPeliasLocationAware:C,minimalRegexp:v,lineRegexp:_,URL_PELIAS:B,URL_PELIAS_PLACE:w,feedIDs:k,geocodingSearchParams:x,geocodingSources:R,getFutureRoutes:j,cityBikeNetworks:P}=u,M=!e||0===e.length,N=!t||0===t.length,T=c(D),L=[],I={type:"all",term:i,results:[]},q=g(D),z=C&&null!=l&&l.lat&&null!=l&&l.lon?{"focus.point.lat":l.lat.toFixed(3),"focus.point.lon":l.lon.toFixed(3)}:{},U=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==T.status&&L.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,T)),(M||e.includes("MapPosition"))&&L.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=j(D);L.push(O.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 n=e.getFavouriteVehicleRentalStations(e.context);if((null==n?void 0:n.length)>0)return!0;const u=e.getFavouriteStops(e.context);return(null==u?void 0:u.length)>0}(u)&&L.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)),M||e.includes("Locations")){const n=x;if(t.includes("Favourite")){const e=d(D);L.push(function(e,t){return Promise.resolve(me(e,t,["address","name"]).map(e=>({type:"FavouritePlace",properties:zn(zn({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}})))}(e,i)),t.includes("Back")&&L.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(N||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),L.push(In(i,n,q,z,R.join(","),B,v,t))}if(N||t.includes("History")){const e=p(D,"endpoint"),t=["bikestation"];t.push(...Gn),t.push(...Vn),t.push(...$n),L.push(Hn(e,i,t))}}if(M||e.includes("ParkingAreas")){if(N||t.includes("Datasource")){const e=x;r&&10!==r&&(e.size=r);const t=["carpark","bikepark"],n=h?h.join(","):null;L.push(In(i,e,q,z,n,B,v,t).then(e=>o?o(e,U):e))}if(N||t.includes("History")){const e=p(D),t=["bikestation"];t.push(...Gn),t.push(...Vn),t.push(...Wn),L.push(Hn(e,i,t))}}const H=e.includes("Stops"),V=e.includes("Stations");if(M||H||V){if(t.includes("Favourite")){const e=f(D);let t;t=e.every(e=>"station"===e.type)?Un(e,w).then(e=>o?o(e,U):e):b(e).then(e=>Un(e,w)).then(e=>o?o(e,U):e),L.push(function(e,t,n,u){return e.then(e=>me(e.filter(e=>"stop"===e.type?n:u),t,["properties.name","properties.name","properties.address"]))}(t,i,H,V))}if(N||t.includes("Datasource")){const t=[];H&&t.push("stop"),V&&t.push("station");const n=r&&10!==r?{size:r}:{};x&&x["boundary.country"]&&(n["boundary.country"]=x["boundary.country"]),(M||e.includes("Locations"))&&(n.dedupestops=1);const u=k.map(e=>`gtfs${e}`).join(",");L.push(In(i,n,q,z,u,B,v,t).then(e=>o?o(e,U):e))}if(N||t.includes("History")){const e=p(D).filter(e=>!e.properties.gid||e.properties.gid.includes("GTFS:")),t=["bikestation"];t.push(...Vn),t.push(...Wn),t.push(...$n),H||t.push("stop"),V||t.push("station"),n?L.push(Hn(e,i,t).then(e=>o?o(e,U):e)):L.push(Hn(e,i,t))}}if(M||e.includes("Routes")){if(t.includes("Favourite")){const e=A(D);L.push(y(e,i,U,a).then(e=>o?o(e,U,"Routes"):e))}if(L.push(F(i,k,n,a).then(e=>o?o(e,U,"Routes"):e)),N||t.includes("History")){const e=p(D),t=["bikestation"];n&&t.push(...Vn.filter(e=>!(e===n))),t.push(...Gn),t.push(...Wn),t.push(...$n),L.push(Hn(e,i,t).then(e=>o?o(e,U,"Routes"):e))}}if(M||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=E(D);L.push(m(e,i))}if(N||t.includes("Datasource")){const e=["bikestation"],t=r&&10!==r?{size:r}:{};L.push(In(i,t,q,z,P.join(","),B,v,e).then(e=>o?o(e,U,"VehicleRentalStations"):e))}if(N||t.includes("History")){const e=p(D),t=[...Gn];t.push(...Vn),t.push(...Wn),t.push(...$n),L.push(Hn(e,i,t))}}Promise.all(L).then(S.default).then(e=>{I.results=e}).catch(e=>{I.error=e}).then(()=>{s(zn(zn({},I),{},{results:ge(_,I.results,i)}))})},300,{leading:!0}),Jn=h.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 Qn(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var u=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&u.firstChild?u.insertBefore(o,u.firstChild):u.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}Jn.init();var Xn={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"};Qn("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 Zn=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Yn=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),eu=M.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 n=e.name,u=e.address,[n||u&&u.split(",")[0],"string"==typeof u?u.replace(new RegExp(`${N.default(n)}([ ,]|$)+`),""):""];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(`${N.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],Zn(e)]:[e.name,e.id,Yn(e),Zn(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Zn(e)]}var n,u},(e,t)=>{const n=T.default(e);return n.plain=t,n});const tu=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},nu=e=>"origin"===e||"destination"===e||"via-point"===e||"origin-stop-near-you"===e,uu=(e,t,n)=>{if(!n)return;if(!e||!e.GTFS.platform)return;const{modes:u,platform:o}=e.GTFS;return[u&&"RAIL"===u[0]?n("track",{lng:t}):n("platform",{lng:t}),o]};function ou(e,t,n){if(!n)return;if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",n("select-from-map",{lng:t})];if("CurrentLocation"===e.type)return["",n("use-own-position",{lng:t})];if("SelectFromOwnLocations"===e.type)return["",n("select-from-own-locations",{lng:t})];let o,[r,i]=eu(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){o=n("vehiclerentalstation",{lng:t});return[o,r,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return o=n("bikepark",{lng:t}),[o,r,void 0,void 0];if("carpark"===e.properties.layer)return o=n("carpark",{lng:t}),[o,r,void 0,void 0];if(e.properties.mode)o=n(e.properties.mode.toLowerCase().replace("favourite",""),{lng:t});else{o=n(e.properties.layer.replace("route-","").toLowerCase().replace("favourite",""),{lng:t})}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var u;const s=Yn(e.properties),a=null===(u=e.properties.addendum)||void 0===u?void 0:u.GTFS.modes,l=uu(e.properties.addendum,t,n);return[o,be(r,s),i,s,a,l]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:n,code:u}=e.properties;return[o,n?be(n.split(",")[0],u):r,i,u,void 0,uu(e.properties.addendum,t)]}return[o,r,i]}const{origin:o,destination:r}=e.properties,i=o.locality?`, ${o.locality} foobar`:"",s=r.locality?`, ${r.locality}`:"",a=o.name,l=r.name;return[n("future-route",{lng:t}),`${n("origin",{lng:t})} ${a}${i} ${n("destination",{lng:t})} ${l}${s}`,e.translatedText]}function ru(e,t,n){if(!n)return;const u=y.DateTime.fromSeconds(Number(e.properties.time)),o=y.DateTime.now();let r=e.properties.arriveBy?n("arrival",{lng:t}):n("departure",{lng:t});return r=u.hasSame(o,"day")?`${r} ${n("today-at")}`:u.hasSame(o.plus({days:1}),"day")?`${r} ${n("tomorrow-at",{lng:t})}`:`${r} ${u.toFormat("ccc d.L.")}`,r=`${r} ${u.toFormat("HH:mm")}`,r}const iu=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=eu(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),su=({suggestions:e,t:t,lng:n})=>{let u=[];const o=e[0];return o&&(o.type&&o.type.includes("Favourite")&&u.push(t("favourite",{lng:n})),u=u.concat(ou(e[0],n))),[...new Set(u)].join(" - ")};function au(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var lu,cu={exports:{}};
|
|
2
|
+
/*! For license information please see index.js.LICENSE.txt */var du=(lu||(lu=1,function(e){var t;"undefined"!=typeof self&&self,e.exports=(t=_.default,function(){var e={888:function(e,t,n){var u,o;o=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,u=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},n=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}}),e},u=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),u=n.length,o=-1,r="",i=n.charCodeAt(0);++o<u;){if(0===(t=n.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?n.charAt(o):"\\"+n.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?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},i=function(t,n,u){0===t&&document.body.focus(),u||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},s=function(t,n,u,o){if(n.emitEvents&&"function"==typeof e.CustomEvent){var r=new CustomEvent(t,{bubbles:!0,detail:{anchor:u,toggle:o}});document.dispatchEvent(r)}};return function(a,l){var c,d,p,f,h={cancelScroll:function(e){cancelAnimationFrame(f),f=null,e||s("scrollCancel",c)},animateScroll:function(u,a,l){h.cancelScroll();var d=n(c||t,l||{}),g="[object Number]"===Object.prototype.toString.call(u),b=g||!u.tagName?null:u;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var E,y,A,F=r(p),D=g?u:function(t,n,u,r){var i=0;if(t.offsetParent)do{i+=t.offsetTop,t=t.offsetParent}while(t);return i=Math.max(i-n-u,0),r&&(i=Math.min(i,o()-e.innerHeight)),i}(b,F,parseInt("function"==typeof d.offset?d.offset(u,a):d.offset,10),d.clip),C=D-m,v=o(),_=0,B=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(C,d),w=function(t){E||(E=t),_+=t-E,A=m+C*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,y=(y=0===B?0:_/B)>1?1:y),e.scrollTo(0,Math.floor(A)),function(t,n){var o=e.pageYOffset;if(t==n||o==n||(m<n&&e.innerHeight+o)>=v)return h.cancelScroll(!0),i(u,n,g),s("scrollStop",d,u,a),E=null,f=null,!0}(A,D)||(f=e.requestAnimationFrame(w),E=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(u,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?i(u,Math.floor(D),!1):(s("scrollStart",d,u,a),h.cancelScroll(!0),e.requestAnimationFrame(w))}}},g=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(a))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var n,o;try{n=u(decodeURIComponent(d.hash))}catch(e){n=u(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(n);(o=o||"#top"!==n?o:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),h.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(u(history.state.anchor)))||h.animateScroll(t,null,{updateURL:!1})}};return h.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",b,!1),h.cancelScroll(),c=null,d=null,p=null,f=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.";h.destroy(),c=n(t,l||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),h}}(o)}.apply(t,[]),void 0===u||(e.exports=u)},432:function(e,t,n){var u=this&&this.__createBinding||(Object.create?function(e,t,n,u){void 0===u&&(u=n),Object.defineProperty(e,u,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,u){void 0===u&&(u=n),e[u]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||u(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(47),t),o(n(926),t),o(n(349),t),o(n(137),t),o(n(729),t),o(n(383),t),o(n(450),t),o(n(358),t),o(n(753),t),o(n(869),t),o(n(352),t),o(n(446),t),o(n(164),t),o(n(305),t),o(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var u=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,o=(0,u.useState)(0),r=o[0],i=o[1],s=(0,u.useCallback)(function(e){i(e)},[t]),a=function(e){var u=e.key;if(null==t?void 0:t.length)if("ArrowUp"===u)n&&n(),e.preventDefault(),s(r>0?r-1:t.length-1);else{if("ArrowDown"!==u)return;n&&n(),e.preventDefault(),r<t.length-1?s(r+1):s(0)}};return(0,u.useEffect)(function(){return window.addEventListener("keydown",a),function(){return window.removeEventListener("keydown",a)}}),(0,u.useEffect)(function(){s(0)},[t]),{selectedIndex:r}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var u=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,u.useState)(e),o=n[0],r=n[1];return(0,u.useEffect)(function(){var n=setTimeout(function(){r(e)},t);return function(){clearTimeout(n)}},[e,t]),o}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var u=n(156);t.useElementSize=function(){var e,t,n=(0,u.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var u=n(156);t.useIntersectionObserver=function(e){var t=(0,u.useRef)(null),n=(0,u.useState)(!1),o=n[0],r=n[1],i=function(e){var t=e[0];r(t.isIntersecting)};return(0,u.useEffect)(function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(i,e),u=t.current;return t.current&&n.observe(t.current),function(){u&&n.unobserve(u)}}r(!1)},[t,e]),{containerRef:t,isVisible:o}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var u=n(156),o=n(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,n=(0,u.useState)(null),i=n[0],s=n[1],a=(0,u.useCallback)(function(){s(window.innerWidth)},[]);return(0,u.useEffect)(function(){a()},[]),(0,o.useOnResize)(a),i>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var u=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,u.useState)(t),o=n[0],r=n[1];return(0,u.useEffect)(function(){e||r(t)},[e,t]),e&&o}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var u=n(729);t.useIsMobile=function(){return!(0,u.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var u=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?u.useLayoutEffect:u.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var u=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,o=e.watch;(0,u.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:n()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}},[n,t,o])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var u=n(156);t.useOnResize=function(e){(0,u.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,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var u=n(156);t.useOnWindowFocus=function(e){(0,u.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,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var u=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,u.useEffect)(function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}})}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var u=n(156);t.useRunAfterUpdate=function(){var e=(0,u.useRef)(null);return(0,u.useEffect)(function(){e.current&&(e.current(),e.current=null)}),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var u=n(156);t.useScrollLock=function(){return{lock:(0,u.useCallback)(function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e},[]),unlock:(0,u.useCallback)(function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))},[])}}},358:function(e,t,n){var u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var o=n(156),r=u(n(888));t.useSmoothScroll=function(e){var t=(0,o.useRef)(null),n=e.ref,u=e.offset,i=void 0===u?0:u,s=e.speed,a=void 0===s?500:s;return(0,o.useEffect)(function(){t.current=new r.default(null,{speed:a,speedAsDuration:!0})},[]),(0,o.useCallback)(function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return i},updateURL:!1})},[i,n])}},156:function(e){e.exports=t}},n={};function u(t){var o=n[t];if(void 0!==o)return o.exports;var r=n[t]={exports:{}};return e[t].call(r.exports,r,r.exports,u),r.exports}return u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u(432)}())}(cu)),cu.exports),pu=au(du),fu={"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"};Qn("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 hu={"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 gu(e,t){if(null==e)return{};var n,u,o=function(e,t){if(null==e)return{};var n={};for(var u in e)if({}.hasOwnProperty.call(e,u)){if(-1!==t.indexOf(u))continue;n[u]=e[u]}return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(u=0;u<r.length;u++)n=r[u],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Qn("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 bu=["item","lng","getItemProps","highlightedIndex","itemIndex","styles"],mu=["suggestions","getMenuProps","getItemProps","lng","styles","hidden","renderClearHistoryButton","handleClearHistory"];function Eu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function yu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Eu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Eu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Au(e){let{item:t,lng:n,getItemProps:o,highlightedIndex:r,itemIndex:i,styles:s}=e,a=gu(e,bu);const[l]=u.useTranslation(),c="FutureRoute"===t.type?yu(yu({},t),{},{translatedText:ru(t,n,l)}):t,d=ou(t,n,l);return _.default.createElement("li",Object.assign({className:B.default(s.suggestion,r===i&&s.suggestionHighlighted)},o({index:i})),_.default.createElement(q.default,Object.assign({item:c,content:d,lng:n},a)))}const Fu="production"!==process.env.NODE_ENV?v.default.shape({name:v.default.string,type:v.default.string,address:v.default.string,selectedIconId:v.default.string,iconColor:v.default.string,translatedText:v.default.string,properties:v.default.shape({layer:v.default.string,color:v.default.string,localadmin:v.default.string,mode:v.default.string,id:v.default.string,source:v.default.string,arrowClicked:v.default.bool,destination:v.default.shape({name:v.default.string,localadmin:v.default.string}),origin:v.default.shape({name:v.default.string,localadmin:v.default.string})})}):{};function Du(e){let{suggestions:t,getMenuProps:n,getItemProps:o,lng:r,styles:i,hidden:s,renderClearHistoryButton:a,handleClearHistory:l}=e,c=gu(e,mu);const[d]=u.useTranslation();return _.default.createElement("div",{className:B.default(i.suggestionsContainerOpen,i.suggestionsContainer,s&&"hidden")},_.default.createElement("ul",Object.assign({className:i.suggestionsList},n()),t.map((e,t)=>_.default.createElement(Au,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))),a&&_.default.createElement("li",o({index:t.length}),_.default.createElement("button",{onClick:l,type:"button",className:i["clear-search-history"]},d("clear-search-history",{lng:r})))))}"production"!==process.env.NODE_ENV&&(Au.propTypes={item:Fu.isRequired,lng:v.default.string.isRequired,getItemProps:v.default.func.isRequired,highlightedIndex:v.default.number.isRequired,itemIndex:v.default.number.isRequired,styles:v.default.objectOf(v.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(Du.propTypes={suggestions:v.default.arrayOf(Fu).isRequired,getMenuProps:v.default.func.isRequired,getItemProps:v.default.func.isRequired,lng:v.default.string.isRequired,styles:v.default.objectOf(v.default.string).isRequired,hidden:v.default.bool.isRequired,renderClearHistoryButton:v.default.bool,handleClearHistory:v.default.func}),Du.defaultProps={renderClearHistoryButton:!1,handleClearHistory:()=>{}};const Cu=({color:e,lng:t,clearInput:n,onKeyDown:o,styles:r})=>{const[i]=u.useTranslation();return _.default.createElement("button",{type:"button",className:r["clear-input"],onClick:n,"aria-label":i("clear-button-label",{lng:t}),onKeyDown:o},_.default.createElement(P.default,{img:"close",color:e}))};function vu({id:e,lng:t,value:u,placeholder:o,required:r,getInputProps:i,getLabelProps:s,clearInput:a,ariaLabel:l,inputRef:c,styles:d,renderLabel:p,isMobile:f,inputClassName:h,transportMode:g,clearButtonColor:b,autoFocus:m,inputOnBlur:E}){const y=n.useRef(null);n.useLayoutEffect(()=>{const e=c.current;e&&null!==y.current&&e===document.activeElement&&e.setSelectionRange(y.current,y.current)},[u]);return _.default.createElement("div",{className:d.container},p&&_.default.createElement("label",s({className:d["sr-only"],htmlFor:e}),l),_.default.createElement("input",Object.assign({"aria-label":l,autoFocus:m,placeholder:o,required:r,type:"text",className:B.default(d.input,d[e],h,f&&g&&d.thin,u&&d.hasValue),value:u,id:e},i({ref:c,onBlur:E,onChange:e=>{y.current=e.target.selectionStart}}))),u&&_.default.createElement(Cu,{lng:t,clearInput:()=>a(c),styles:d,color:b,onKeyDown:e=>tu(e)&&a(c)}))}function _u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Bu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_u(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_u(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(Cu.propTypes={color:v.default.string.isRequired,lng:v.default.string.isRequired,clearInput:v.default.func.isRequired,onKeyDown:v.default.func.isRequired,styles:v.default.objectOf(v.default.string).isRequired}),"production"!==process.env.NODE_ENV&&(vu.propTypes={id:v.default.string.isRequired,lng:v.default.string.isRequired,placeholder:v.default.string.isRequired,required:v.default.bool.isRequired,value:v.default.string.isRequired,getInputProps:v.default.func.isRequired,getLabelProps:v.default.func.isRequired,clearInput:v.default.func.isRequired,ariaLabel:v.default.string.isRequired,inputRef:v.default.shape({current:v.default.oneOfType([v.default.string,v.default.object])}).isRequired,styles:v.default.objectOf(v.default.string).isRequired,renderLabel:v.default.bool,isMobile:v.default.bool.isRequired,inputClassName:v.default.string.isRequired,transportMode:v.default.string,clearButtonColor:v.default.string.isRequired,autoFocus:v.default.bool,inputOnBlur:v.default.func}),vu.defaultProps={autoFocus:!1,renderLabel:!1,transportMode:void 0,inputOnBlur:()=>{}};const wu=({appElement:e,id:t,placeholder:o,clearInput:r,onSelectedItemChange:i,fontWeights:s,clearOldSearches:a,suggestionProps:l,lng:c,ariaProps:d,value:f,inputClassName:h,required:g,mobileLabel:b,showScroll:m,state:E,dispatch:y,colors:A})=>{const[F]=u.useTranslation(),{lock:D,unlock:C}=pu.useScrollLock(),v=m?fu:hu,B=`${t}-input`,w=`${t}-label`,[S,O]=n.useState(!1),k=_.default.useRef();n.useEffect(()=>{L.default.setAppElement(e)},[]),n.useEffect(()=>{E.renderMobile?D():C()},[E.renderMobile]);const{highlightedIndex:x,getLabelProps:R,getMenuProps:j,getInputProps:M,getItemProps:N,setHighlightedIndex:T}=p.useCombobox({items:E.suggestions,inputValue:f,isOpen:!0,onSelectedItemChange:e=>{i(e),y({type:"TOGGLE_MENU",isMobile:!0})},inputId:B,labelId:w,selectedItem:null,defaultHighlightedIndex:-1,onInputValueChange:({inputValue:e})=>E.renderMobile&&y({type:"INPUT_CHANGE",value:e}),stateReducer:(e,{changes:t,type:n})=>{switch(n){case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return T(-1),y({type:"TOGGLE_MENU",isMobile:!0}),e;case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return E.loading?(y({type:"PENDING_ENTER",enterPending:!0}),e):-1===e.highlightedIndex?Bu(Bu({},t),{},{selectedItem:E.suggestions[0]}):t;case p.useCombobox.stateChangeTypes.InputBlur:return e;default:return t}},itemToString:e=>e?iu(e):""});R({},{suppressRefError:!0}),j({},{suppressRefError:!0}),M({},{suppressRefError:!0}),N({index:-1},{suppressRefError:!0});const{ariaRequiredText:q,SearchBarId:z,ariaCurrentSuggestion:U}=d,H=q.concat(" ").concat(z).concat(" ").concat(U);return _.default.createElement(L.default,{isOpen:E.renderMobile,className:v["mobile-modal"],overlayClassName:v["mobile-modal-overlay"],shouldReturnFocusAfterClose:!1,shouldCloseOnEsc:!0},_.default.createElement("div",{className:v["mobile-modal-content"],style:{"--color":A.primary,"--accessible-primary-color":A.accessiblePrimary,"--hover-color":A.hover,"--font-weight-medium":s.medium}},_.default.createElement("div",{className:v["combobox-container"],htmlFor:B},_.default.createElement("button",{type:"button",className:v["combobox-icon"],onClick:()=>{T(-1),y({type:"TOGGLE_MENU",isMobile:!0})},onKeyDown:e=>{tu(e)&&(T(-1),y({type:"TOGGLE_MENU",isMobile:!0}))},"aria-label":F("cancel",{lng:c}),tabIndex:0},_.default.createElement(P.default,{img:"arrow",color:A.primary})),_.default.createElement("span",{className:v["right-column"]},_.default.createElement("span",Object.assign({className:v["combobox-label"],id:w},R()),b),_.default.createElement(vu,{placeholder:nu(t)?F("address-place-or-business",{lng:c}):o,id:t,lng:c,value:f,getInputProps:M,getLabelProps:R,clearInput:()=>r(k),ariaLabel:H,inputRef:k,styles:v,renderLabel:!1,clearButtonColor:A.primary,autoFocus:!0,inputClassName:h,required:g,isMobile:!0}),_.default.createElement(Du,Object.assign({suggestions:E.suggestions,getMenuProps:j,getItemProps:N,highlightedIndex:x,isOpen:!0,hidden:!1,lng:c,styles:v,renderClearHistoryButton:!0,handleClearHistory:()=>O(!0)},l)))),_.default.createElement(I.default,{appElement:e,isModalOpen:S,handleClose:()=>O(!1),headerText:F("delete-old-searches-header",{lng:c}),primaryButtonText:F("delete",{lng:c}),secondaryButtonText:F("cancel",{lng:c}),primaryButtonOnClick:()=>{a(),O(!1)},secondaryButtonOnClick:()=>O(!1),colors:A,fontWeights:s,lang:c})))};function Su(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Ou(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Su(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Su(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}"production"!==process.env.NODE_ENV&&(wu.propTypes={appElement:v.default.string.isRequired,id:v.default.string.isRequired,clearInput:v.default.func.isRequired,clearOldSearches:v.default.func.isRequired,onSelectedItemChange:v.default.func.isRequired,value:v.default.string.isRequired,colors:v.default.objectOf(v.default.string).isRequired,fontWeights:v.default.shape({medium:v.default.number.isRequired}).isRequired,suggestionProps:v.default.shape({}).isRequired,ariaProps:v.default.shape({ariaRequiredText:v.default.string.isRequired,SearchBarId:v.default.string.isRequired,ariaCurrentSuggestion:v.default.string.isRequired}).isRequired,inputClassName:v.default.string.isRequired,placeholder:v.default.string.isRequired,mobileLabel:v.default.string.isRequired,required:v.default.bool.isRequired,showScroll:v.default.bool.isRequired,lng:v.default.string.isRequired,state:v.default.shape({suggestions:v.default.arrayOf(v.default.shape({})).isRequired,renderMobile:v.default.bool.isRequired,loading:v.default.bool.isRequired}).isRequired,dispatch:v.default.func.isRequired});const ku=(e,t)=>{switch(t.type){case"INPUT_CHANGE":return Ou(Ou({},e),{},{value:t.value});case"FETCH_SUGGESTIONS":return Ou(Ou({},e),{},{loading:t.loading,suggestions:t.suggestions||e.suggestions});case"CLEAR_SUGGESTIONS":return Ou(Ou({},e),{},{suggestions:[]});case"RESET_SOURCES":return Ou(Ou({},e),{},{sources:t.sources});case"SET_SOURCES":return Ou(Ou({},e),{},{showOwnPlaces:t.showOwnPlaces,sources:t.sources,pendingSelection:t.pendingSelection});case"CLEAR":return Ou(Ou({},e),{},{value:"",isCleared:!0,suggestions:[]});case"INPUT_BLUR":return Ou(Ou({},e),{},{value:t.value||e.value,isCleared:!t.isMobile&&e.isCleared,pendingSelection:null,showOwnPlaces:!1});case"RESET":return t.initialState;case"PENDING_ENTER":return Ou(Ou({},e),{},{enterPending:t.enterPending});case"TOGGLE_MENU":return t.isMobile?e.renderMobile?Ou(Ou({},e),{},{renderMobile:!1,isCleared:!1}):Ou(Ou({},e),{},{renderMobile:!0,value:e.isCleared?"":e.value}):Ou(Ou({},e),{},{isMenuOpen:!e.isMenuOpen,renderMobile:t.isMobile&&!e.renderMobile});default:return e}};function xu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);t&&(u=u.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,u)}return n}function Ru(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xu(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const ju=["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 Pu({appElement:e,id:t,placeholder:o,onSelect:r,icon:i,value:s,onClear:a,lang:l,getAutoSuggestIcons:c,handleViaPoints:d,focusChange:f,storeRef:h,isMobile:g,mobileLabel:b,inputClassName:m,translatedPlaceholder:E,required:y,ariaLabel:A,fontWeights:F,colors:D,modeSet:C,showScroll:v,isEmbedded:w,transportMode:S,targets:O,sources:k,geocodingSize:x,filterResults:R,searchContext:j,pathOpts:M,refPoint:N}){const[T]=u.useTranslation(),L={suggestions:[],loading:!1,sources:k,showOwnPlaces:!1,pendingSelection:null,isCleared:!1,renderMobile:!1,value:s,enterPending:!1,isMenuOpen:!1},[I,q]=n.useReducer(ku,L);n.useEffect(()=>q({type:"RESET",initialState:L}),[s]),n.useEffect(()=>q({type:"RESET_SOURCES",sources:k}),[k]);const z=n.useRef(t);n.useEffect(()=>{h&&h(z.current)},[z.current]);const U=n.useCallback(()=>{const e=!(null!=O&&O.length)||O.includes("Locations"),t=(({targets:e,isLocationSearch:t,isMobile:n,ownPlaces:u,sources:o})=>{const r=!(null!=e&&e.length);let i;return u?(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||n||o.length&&!o.includes("Favourite")||i.push("SelectFromOwnLocations")),i})({targets:O,isLocationSearch:e,isMobile:g,ownPlaces:I.showOwnPlaces,sources:I.sources});((e,t,n,u,o,r,i,s,a,l)=>{s(null),Kn(e,t,n,u,o,r,i,s,a,l)})(t,I.sources?I.sources.filter(t=>!e||"Favourite"===!t||I.showOwnPlaces||g):I.sources,S,j,R,x,{input:I.value||""},e=>{if(null==e)return void q({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=Ru({},e);return t.properties.labelId=T(e.properties.labelId,{lng:l}),t}return e});q({type:"FETCH_SUGGESTIONS",loading:!1,suggestions:t})},M,N)},[I.value,I.sources,I.showOwnPlaces,O,S,j,R,x,g,l,M,N,t]),H=n.useCallback((e,n)=>{e&&(d?d(e,n):r(e,t),!f||g&&!w||f(),z.current&&z.current.blur())},[g]),V=e=>H(e.selectedItem,e.highlightedIndex),{isOpen:W,highlightedIndex:$,getLabelProps:G,getMenuProps:K,getInputProps:J,getItemProps:Q,selectItem:X,openMenu:Z,closeMenu:Y}=p.useCombobox({inputId:t,inputValue:I.value,defaultHighlightedIndex:0,onInputValueChange:({inputValue:e})=>q({type:"INPUT_CHANGE",value:e}),stateReducer:n.useCallback((e,{type:t,changes:n})=>{switch(t){case p.useCombobox.stateChangeTypes.ItemClick:case p.useCombobox.stateChangeTypes.InputKeyDownEnter:return I.loading?(q({type:"PENDING_ENTER",enterPending:!0}),e):n.selectedItem?"SelectFromOwnLocations"===n.selectedItem.type?(q({type:"SET_SOURCES",sources:["Favourite","Back"],showOwnPlaces:!0,pendingSelection:n.selectedItem.type}),e):"back"===n.selectedItem.type?(q({type:"SET_SOURCES",sources:k,showOwnPlaces:!1,pendingSelection:null}),e):n:n;case p.useCombobox.stateChangeTypes.InputClick:return ju.includes(s)?Ru(Ru({},n),{},{inputValue:"",isOpen:!0}):Ru(Ru({},n),{},{isOpen:!0});case p.useCombobox.stateChangeTypes.InputBlur:return n.selectedItem?Ru(Ru({},n),{},{selectedItem:e.selectItem,inputValue:e.inputValue}):n;case p.useCombobox.stateChangeTypes.InputKeyDownEscape:return Ru(Ru({},n),{},{inputValue:""});default:return n}},[I.loading,s,g]),items:I.suggestions,itemToString:e=>e?iu(e):"",onSelectedItemChange:V,onIsOpenChange:e=>{e.isOpen&&!I.renderMobile&&q({type:"TOGGLE_MENU",isMobile:g})}}),ee=e=>{q({type:"CLEAR"}),a&&a(t),e.current&&e.current.focus(),Z()};n.useEffect(()=>{(W||I.renderMobile)&&U(I.value)},[W,I.renderMobile,I.value,U]),n.useEffect(()=>{I.enterPending&&!I.loading&&(H(I.suggestions[0],0),Y())},[I.loading,I.pendingEnter,I.suggestions]);const te={loading:I.loading,isMobile:g,ariaFavouriteString:T("favourite",{lng:l}),fontWeights:F,getAutoSuggestIcons:c,colors:D,modeSet:C},{ariaCurrentSuggestion:ne,ariaRequiredText:ue,SearchBarId:oe,ariaLabelText:re}=(({id:e,ariaLabel:t,lng:n,t:u,isMobile:o,suggestions:r,value:i,required:s})=>{const a=e.replace("searchfield-",""),l=t||u(a,{lng:n}).replace("searchfield-","").concat("."),c=s?`${u("required",{lng:n})}.`:"",d=u(o?"search-autosuggest-label-instructions-mobile":"search-autosuggest-label-instructions-desktop",{lng:n}),p="origin"===e?u("search-autosuggest-label-move-to-destination",{lng:n}):"";return{SearchBarId:l,ariaRequiredText:c,ariaLabelText:d.concat(" ").concat(p),ariaSuggestionLen:u("search-autosuggest-len",{count:r.length,lng:n}),ariaCurrentSuggestion:su({suggestions:r,t:u,lng:n})||i?u("search-current-suggestion",{lng:n,selection:su({suggestions:r,t:u,lng:n}).toLowerCase()||i}):""}})({id:t,lng:l,t:T,isMobile:g,ariaLabel:A,suggestions:I.suggestions,value:I.value,required:y});return n.useEffect(()=>{I.renderMobile||W||q({type:"RESET",initialState:L})},[I.renderMobile,W]),_.default.createElement(_.default.Fragment,null,g&&_.default.createElement(wu,{placeholder:T(o,{lng:l}),fontWeights:F,clearOldSearches:()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=j;e&&t&&(t(e),n&&n(e),U(I.value))},appElement:e,mobileLabel:b||T(t,{lng:l}),ariaProps:{ariaCurrentSuggestion:ne,SearchBarId:oe,ariaRequiredText:ue},id:t,lng:l,onSelectedItemChange:V,value:I.value,clearInput:ee,suggestionProps:te,showScroll:!!v,colors:D,inputClassName:m,required:y,state:I,dispatch:q}),_.default.createElement("div",{className:B.default(Xn["autosuggest-input-container"],Xn[t],I.renderMobile&&"hidden"),style:{"--color":D.primary,"--hover-color":D.hover}},i&&_.default.createElement("div",{className:B.default(Xn["autosuggest-input-icon"],Xn[t],m&&Xn[`${m}-input-icon`]),"aria-label":ue.concat(" ").concat(oe).concat(" ").concat(T("search-autosuggest-label",{lng:l}))},_.default.createElement(P.default,{img:`${i}`})),_.default.createElement(vu,{inputClassName:m,ariaLabel:ne.concat(" ").concat(ue).concat(" ").concat(oe).concat(" ").concat(re),id:t,lng:l,getInputProps:J,getLabelProps:G,selectItem:X,value:I.value,clearInput:ee,inputRef:z,styles:Xn,clearButtonColor:D.primary,placeholder:E||T(o,{lng:l}),required:y,transportMode:S,isMobile:g,inputOnBlur:()=>{q({isMobile:g,value:!g&&s,type:"INPUT_BLUR"}),g||q({type:"RESET",initialState:L})}}),_.default.createElement(Du,Object.assign({hidden:!W||g,highlightedIndex:$,getItemProps:Q,getMenuProps:K,suggestions:I.suggestions,lng:l,styles:Xn},te))))}"production"!==process.env.NODE_ENV&&(Pu.propTypes={appElement:v.default.string.isRequired,icon:v.default.string,id:v.default.string.isRequired,placeholder:v.default.string.isRequired,translatedPlaceholder:v.default.string,value:v.default.string,transportMode:v.default.string,geocodingSize:v.default.number,filterResults:v.default.func,searchContext:v.default.shape({URL_PELIAS:v.default.string,context:v.default.object,clearOldSearches:v.default.func,clearFutureRoutes:v.default.func}).isRequired,sources:v.default.arrayOf(v.default.string),targets:v.default.arrayOf(v.default.string),ariaLabel:v.default.string,onSelect:v.default.func.isRequired,onClear:v.default.func,storeRef:v.default.func,handleViaPoints:v.default.func,focusChange:v.default.func,lang:v.default.string,isMobile:v.default.bool,pathOpts:v.default.shape({routesPrefix:v.default.string,stopsPrefix:v.default.string}),mobileLabel:v.default.string,refPoint:v.default.shape({address:v.default.string,lat:v.default.number,lon:v.default.number}),inputClassName:v.default.string,fontWeights:v.default.shape({medium:v.default.number}),colors:v.default.objectOf(v.default.string),getAutoSuggestIcons:v.default.objectOf(v.default.func),required:v.default.bool,modeSet:v.default.string,showScroll:v.default.bool,isEmbedded:v.default.bool}),Pu.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:f.defaultColors,required:!1,modeSet:void 0,showScroll:!1,refPoint:{}};e.default=e=>_.default.createElement(u.I18nextProvider,{i18n:Jn},_.default.createElement(Pu,e)),Object.defineProperty(e,"__esModule",{value:!0})});
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUvaW5kZXguanMiLCIuLi9zcmMvdXRpbHMvaTE4bi5qcyIsIi4uL3NyYy91dGlscy90cmFuc2xhdGlvbnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtaW5qZWN0L2Rpc3Qvc3R5bGUtaW5qZWN0LmVzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy91dGlscy91dGlscy5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvU3VnZ2VzdGlvbnMuanMiLCIuLi9zcmMvY29tcG9uZW50cy9DbGVhckJ1dHRvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0lucHV0LmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvTW9iaWxlVmlldy5qcyIsIi4uL3NyYy91dGlscy9zZWFyY2hSZWR1Y2VyLmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiLyoqXG4gKiAgYWNjZXB0IGVxdWFsaXR5IG9mIG5vbiBudWxsaXNoIHZhbHVlc1xuICpcbiAqIEBuYW1lIHRydUVxXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gdmFsMSBGaXJzdCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHBhcmFtMiBTZWNvbmQgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC50cnVFcSgnMicsICcyJyk7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRydUVxKHZhbDEsIHZhbDIpIHtcbiAgcmV0dXJuIHZhbDEgJiYgdmFsMiAmJiB2YWwxID09PSB2YWwyO1xufVxuIiwiaW1wb3J0IHRydUVxIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC10cnUtZXEnO1xuLyoqXG4gKiBDaGVja3MgdGhhdCBpcyBpdGVtcyBkdXBsaWNhdGVcbiAqXG4gKiBAbmFtZSBpc0R1cGxpY2F0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0xIE9iamVjdCBjb250YWluaW5nIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICoge1xuICogIHByb3BlcnRpZXMge1xuICogICAgICBndGZzSWQ6IFN0cmluZ1xuICogICAgICBnaWQ6IFN0cmluZyBmcm9tIGdlb2NvZGVyXG4gKiAgICAgIG5hbWU6IFN0cmluZ1xuICogICAgICBsYWJlbDogU3RyaW5nXG4gKiAgICAgICBhZGRyZXNzOiBTdHJpbmdcbiAqICAgICAgZ2VvbWV0cnkge1xuICogICAgICAgICBjb29yZGluYXRlcyBbTnVtYmVyIGxhdCwgTnVtYmVyIGxvbl1cbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMiBPYmplY3Qgd2l0aCBzYW1lIGF0dHJpYnV0ZXMgYXMgaXRlbTFcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5pc0R1cGxpY2F0ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cblxuY29uc3QgZ3Rmc1N0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbicsICdmYXZvdXJpdGVTdG9wJywgJ2Zhdm91cml0ZVN0YXRpb24nXTtcbmNvbnN0IHZlaGljbGVSZW50YWxMYXllcnMgPSBbJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJywgJ2Jpa2VzdGF0aW9uJ107XG5cbmZ1bmN0aW9uIGxhYmVsSWRUb0dpZChpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoJzonKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYGNpdHliaWtlcyR7cGFydHNbMF19OmJpa2VzdGF0aW9uOiR7cGFydHNbMV19YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsYWRtaW59Ly8ke2QxLm5hbWV9Ly8ke2QxLmxvY2FsYWRtaW59YDtcbiAgICBjb25zdCBuYW1lMiA9IGAke28yLm5hbWV9Ly8ke28yLmxvY2FsYWRtaW59Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsYWRtaW59YDtcblxuICAgIHJldHVybiBuYW1lMSA9PT0gbmFtZTI7XG4gIH1cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgdmVoaWNsZVJlbnRhbExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgdmVoaWNsZVJlbnRhbExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpXG4gICkge1xuICAgIGNvbnN0IGlkMSA9IHByb3BzMS5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMS5sYWJlbElkKTtcbiAgICBjb25zdCBpZDIgPSBwcm9wczIuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczIubGFiZWxJZCk7XG4gICAgcmV0dXJuIGlkMSA9PT0gaWQyO1xuICB9XG4gIGlmIChwcm9wczEuZ3Rmc0lkICYmIHByb3BzMi5ndGZzSWQpIHtcbiAgICByZXR1cm4gcHJvcHMxLmd0ZnNJZCA9PT0gcHJvcHMyLmd0ZnNJZDtcbiAgfVxuICBpZiAoXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcikgJiZcbiAgICBwcm9wczEuZ2lkICYmXG4gICAgcHJvcHMyLmdpZFxuICApIHtcbiAgICByZXR1cm4gcHJvcHMxLmdpZCA9PT0gcHJvcHMyLmdpZDtcbiAgfVxuXG4gIGNvbnN0IHAxID0gaXRlbTEgJiYgaXRlbTEuZ2VvbWV0cnkgPyBpdGVtMS5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcDIgPSBpdGVtMiAmJiBpdGVtMi5nZW9tZXRyeSA/IGl0ZW0yLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuXG4gIGlmIChwMSAmJiBwMikge1xuICAgIC8vIGJvdGggaGF2ZSBnZW9tZXRyeVxuICAgIGlmIChNYXRoLmFicyhwMVswXSAtIHAyWzBdKSA8IDFlLTYgJiYgTWF0aC5hYnMocDFbMV0gLSBwMlsxXSkgPCAxZS02KSB7XG4gICAgICAvLyBsb2NhdGlvbiBtYXRjaCBpcyBub3QgZW5vdWdoLiBSZXF1aXJlIGEgY29tbW9uIHByb3BlcnR5XG4gICAgICBpZiAoXG4gICAgICAgIHRydUVxKHByb3BzMS5uYW1lLCBwcm9wczIubmFtZSkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmxhYmVsLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIuYWRkcmVzcykgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmxhYmVsLCBwcm9wczIuYWRkcmVzcylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IGlzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gvb3JkZXJCeSc7XG5pbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0R1cGxpY2F0ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlJztcblxuY29uc3Qgbm9ybWFsaXplID0gc3RyID0+IHtcbiAgaWYgKCFpc1N0cmluZyhzdHIpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbn07XG5cbmNvbnN0IHNwbGl0U2hvcnROYW1lQXRMZXR0ZXJzID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKFxccHtMfSspL3UpO1xufTtcblxuY29uc3QgdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzID0gc3RyID0+IHtcbiAgcmV0dXJuIC9eWzAtOV0rXFxwe0x9KyQvdS50ZXN0KHN0cik7XG59O1xuXG4vKipcbiAqIExheWVyVHlwZSBkZXBpY3RzIHRoZSB0eXBlIG9mIHRoZSBwb2ludC1vZi1pbnRlcmVzdC5cbiAqL1xuY29uc3QgTGF5ZXJUeXBlID0ge1xuICBBZGRyZXNzOiAnYWRkcmVzcycsXG4gIEJhY2s6ICdiYWNrJyxcbiAgQ3VycmVudFBvc2l0aW9uOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgRmF2b3VyaXRlU3RvcDogJ2Zhdm91cml0ZVN0b3AnLFxuICBGYXZvdXJpdGVTdGF0aW9uOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gIEZhdm91cml0ZVBsYWNlOiAnZmF2b3VyaXRlUGxhY2UnLFxuICBGYXZvdXJpdGVSb3V0ZTogJ2Zhdm91cml0ZVJvdXRlJyxcbiAgRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246ICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIFZlaGljbGVSZW50YWxTdGF0aW9uOiAnYmlrZXN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICBpdGVtLmd0ZnNJZCxcbiAgKX0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0IChtaW46IDAsIG1heDogMS41KS4gVGhlIGJlc3QgbWF0Y2ggd2lsbCByZXR1cm4gYSBudW1iZXIgb2YgMS41LlxuICogV29yc2UgbWF0Y2hlcyB3aWxsIHJldHVybiAwIG9yIDAuNS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHtcbiAgICAgIHJldHVybiB7IG5hbWUsIHZhbHVlOiByZXN1bHRQcm9wZXJ0aWVzW25hbWVdIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKGVsZW1lbnQgPT4gaXNTdHJpbmcoZWxlbWVudC52YWx1ZSkgJiYgZWxlbWVudC52YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAoZWxlbWVudCA9PiB7XG4gICAgICBsZXQgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKGVsZW1lbnQudmFsdWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZWxlbWVudC5uYW1lID09PSAnc2hvcnROYW1lJyAmJlxuICAgICAgICAgIHRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyhub3JtYWxpemVkVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIHRoZSBzaG9ydE5hbWUgaXMgb2YgYSBjZXJ0YWluIGZvcm1hdCAoZS5nLiA4OUEpLCBpdCBpcyB0cmVhdGVkIGhlcmVcbiAgICAgICAgICAvLyBhcyBpZiBpdCBoYWQgdGhlIGxlbmd0aCBvZiB0aGUgbnVtYmVycyB3aXRoIHRoZSBsZXR0ZXJzIHJlbW92ZWQuXG4gICAgICAgICAgLy8gU28gdGhlIGxlbmd0aCBvZiA4OUEgd291bGQgYmUgdHJlYXRlZCBhcyAyLlxuICAgICAgICAgIFtub3JtYWxpemVkVmFsdWVdID0gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmdWxsIG1hdGNoIGF0IHN0YXJ0LiBSZXR1cm4gbWF4IHJlc3VsdCB3aGVuIG1hdGNoIGlzIGZ1bGwsIG5vdCBvbmx5IHBhcnRpYWxcbiAgICAgICAgcmV0dXJuIDAuNSArIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCAvIG5vcm1hbGl6ZWRWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBiZWNhdXNlIG9mIGZpbHRlcm1hdGNoaW5ndG9pbnB1dCwgd2Uga25vdyB0aGF0IG1hdGNoIG9jY3VycmVkIHNvbWV3aGVyZVxuICAgICAgLy8gZG9uJ3QgcnVuIGZpbHRlcm1hdGNoaW5nIGFnYWluIGJ1dCBlc3RpbWF0ZSByb3VnaGx5OlxuICAgICAgLy8gdGhlIGxvbmdlciB0aGUgbWF0Y2hpbmcgc3RyaW5nLCB0aGUgYmV0dGVyIGNvbmZpZGVuY2UsIG1heCBiZWluZyAwLjVcbiAgICAgIHJldHVybiAoMC41ICogbm9ybWFsaXplZFRlcm0ubGVuZ3RoKSAvIChub3JtYWxpemVkVGVybS5sZW5ndGggKyAxKTtcbiAgICB9KVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+IChjdXJyZW50ID4gcHJldmlvdXMgPyBjdXJyZW50IDogcHJldmlvdXMpLFxuICAgICAgMCxcbiAgICApO1xufTtcblxuLyoqXG4gKiBSYW5rcyB0aGUgcmVzdWx0IGJhc2VkIG9uIGl0cyBsYXllciBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIgdGhlIGxheWVyIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSB0aGUgc291cmNlIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJSYW5rID0gKGxheWVyLCBzb3VyY2UpID0+IHtcbiAgc3dpdGNoIChsYXllcikge1xuICAgIGNhc2UgTGF5ZXJUeXBlLkN1cnJlbnRQb3NpdGlvbjpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJhY2s6XG4gICAgICByZXR1cm4gMC45O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21NYXA6XG4gICAgICByZXR1cm4gMC44O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6XG4gICAgICByZXR1cm4gMC43OTtcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdGF0aW9uOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVBsYWNlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0b3A6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUm91dGU6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC40NTtcbiAgICBjYXNlIExheWVyVHlwZS5GdXR1cmVSb3V0ZTpcbiAgICAgIHJldHVybiAwLjQ0O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgIGlmIChpc1N0cmluZyhzb3VyY2UpICYmIHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDAuNDM7XG4gICAgICB9XG4gICAgICByZXR1cm4gMC40MjtcbiAgICB9XG4gICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgcmV0dXJuIDAuMzY7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHZlbnVlLCBhZGRyZXNzLCBzdHJlZXQsIHJvdXRlLXh4eFxuICAgICAgcmV0dXJuIDAuNDE7XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHNvcnQgdGhlIHJlc3VsdHMuIE9yZGVycyBhcyBmb2xsb3dzOlxuICogIC0gY3VycmVudCBwb3NpdGlvbiBmaXJzdCBmb3IgYW4gZW1wdHkgc2VhcmNoXG4gKiAgLSBtYXRjaGluZyByb3V0ZXMgZmlyc3RcbiAqICAtIG90aGVyd2lzZSBieSBjb25maWRlbmNlLCBleGNlcHQgdGhhdDpcbiAqICAgIC0gYm9vc3Qgd2VsbCBtYXRjaGluZyBzdGF0aW9ucyAoZXNwZWNpYWxseSBmcm9tIEdURlMpXG4gKiAgICAtIHJhbmsgc3RvcHMgbG93ZXIgYXMgdGhleSB0ZW5kIHRvIG9jY3VweSBtb3N0IG9mIHRoZSBzZWFyY2ggcmVzdWx0c1xuICogIC0gaXRlbXMgd2l0aCBubyBjb25maWRlbmNlIChvbGQgc2VhcmNoZXMgYW5kIGZhdm9yaXRlcyk6XG4gKiAgICAtIHJhbmsgZmF2b3VyaXRlcyBiZXR0ZXIgdGhhbiBvcmRpbmFyeSBvbGQgc2VhcmNoZXNcbiAqICAgIC0gcmFuayBmdWxsIG1hdGNoIGJldHRlciB0aGFuIHBhcnRpYWwgbWF0Y2hcbiAqICAgIC0gcmFuayBtYXRjaCBhdCBtaWRkbGUgd29yZCBsb3dlciB0aGFuIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqICAgIC0gcmFuayBiaWtlIHJlbnRhbCBzdGF0aW9ucyBsb3dlclxuICogQHBhcmFtIHsqW119IHJlc3VsdHMgVGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2VyZSByZWNlaXZlZFxuICogQHBhcmFtIHtTdHJpbmd9IHRlcm0gVGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRTZWFyY2hSZXN1bHRzID0gKGxpbmVSZWdleHAsIHJlc3VsdHMsIHRlcm0gPSAnJykgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0cykgfHwgIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3QgaXNMaW5lSWRlbnRpZmllciA9IHZhbHVlID0+XG4gICAgaXNTdHJpbmcodmFsdWUpICYmIGxpbmVSZWdleHAgJiYgbGluZVJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICBjb25zdCBub3JtYWxpemVkVGVybSA9IG5vcm1hbGl6ZSh0ZXJtKTtcbiAgY29uc3QgaXNMaW5lU2VhcmNoID0gaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemVkVGVybSk7XG5cbiAgY29uc3Qgb3JkZXJlZFJlc3VsdHMgPSBvcmRlckJ5KFxuICAgIHJlc3VsdHMuZmlsdGVyKHIgPT4gciksXG4gICAgW1xuICAgICAgLy8gcmFuayBtYXRjaGluZyByb3V0ZXMgYmVzdFxuICAgICAgcmVzdWx0ID0+XG4gICAgICAgIGlzTGluZVNlYXJjaCAmJlxuICAgICAgICBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpKSAmJlxuICAgICAgICBub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWRlbmNlLCBsYXllciwgc291cmNlIH0gPSByZXN1bHQucHJvcGVydGllcztcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIERvaW5nIHNlYXJjaCB3aXRoIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICAvLyBObyBjb25maWRlbmNlIHRvIG1hdGNoLCBzbyB1c2UgcmFua2VkIG9sZCBzZWFyY2hlcyBhbmQgZmF2b3VyaXRlc1xuICAgICAgICAgIHJldHVybiBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtdXN0IGhhbmRsZSBhIG1peHVwIG9mIGdlb2NvZGVyIHNlYXJjaGVzIGFuZCBpdGVtcyBhYm92ZVxuICAgICAgICAvLyBOb3JtYWwgY29uZmlkZW5jZSByYW5nZSBmcm9tIGdlb2NvZGVyIGlzIGFib3V0IDAuMyAuLiAxXG4gICAgICAgIGlmICghY29uZmlkZW5jZSkge1xuICAgICAgICAgIC8vIG5vdCBmcm9tIGdlb2NvZGVyLCBlc3RpbWF0ZSBjb25maWRlbmNlIG91cnNlbHZlc1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VvY29kZWQgaXRlbXMgd2l0aCBjb25maWRlbmNlLCBqdXN0IGFkanVzdCBhIGxpdHRsZVxuICAgICAgICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgICAgICAgY29uc3QgYm9vc3QgPSBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwID8gMC4wMiA6IDAuMDE7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSArIGJvb3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0U2hvcnROYW1lTWF0Y2hlc0xpbmVXaXRoTnVtYmVyc0FuZExldHRlcnMoXG4gICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBzcGxpdFNob3J0TmFtZUF0TGV0dGVycyhyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpWzBdXG4gICAgICAgICAgICA6IHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFNob3J0TmFtZU1hdGNoZXNMaW5lV2l0aE51bWJlcnNBbmRMZXR0ZXJzKFxuICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lLFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gc3BsaXRTaG9ydE5hbWVBdExldHRlcnMocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKVsxXVxuICAgICAgICAgICAgOiByZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYycsICdhc2MnLCAnYXNjJywgJ2FzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgZmlsdGVycyBsaXN0IG1hdGNoaW5nIHRvIGlucHV0LlxuICpcbiAqIEBuYW1lIGZpbHRlck1hdGNoaW5nVG9JbnB1dFxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBMaXN0IGNvbnRhaW5pbiBvYmplY3RzIGUuZyggIHtcbiAqICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnXG4gKiAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAqICAgICAgICAgICBsYWJlbDogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgICAgbGF5ZXI6ICdhZGRyZXNzJyxcbiAqICAgICAgICAgICBuYW1lOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgZ2VvbWV0cnk6IHsgY29vcmRpbmF0ZXM6IFtsb24sIGxhdF0gfSxcbiAqICAgICAgIH0sKVxuICogQHBhcmFtIHtTdHJpbmd9IElucHV0IElucHV0IGdpdmVuIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3RcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBMaXN0IG9mIGZpZWxkcyB0aGF0IGxpc3QgaXMgZmlsdGVyZWQgYnkgZS5nIChbcHJvcGVydGllcy5sYWJlbCwgcHJvcGVydGllcy5uYW1lXSlcbiAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgQXJyYXkuXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5maWx0ZXJNYXRjaGluZ1RvSW5wdXQoW3t0eXBlOiBmZWF0dXJlLCBwcm9wZXJ0aWVzIHsgLi4uIG5hbWU6IHRlc3RhZGRyZXNzNCB9IC4uLiB9XSwgJ3Rlc3RhZGRyZXNzNCcsICdwcm9wZXJ0aWVzLm5hbWUnKTtcbiAqIC8vPSBMaXN0IGNvbnRhaW5pbmcgb2JqZWN0IHdpdGggZ2l2ZW4gbmFtZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGxpc3QsIElucHV0LCBmaWVsZHMpIHtcbiAgaWYgKHR5cGVvZiBJbnB1dCA9PT0gJ3N0cmluZycgJiYgSW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0ID0gSW5wdXQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlXb3JkID0gaW5wdXQuaW5jbHVkZXMoJyAnKSB8fCBpbnB1dC5pbmNsdWRlcygnLCcpO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgICAgZmllbGRzLmZvckVhY2gocE5hbWUgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQoaXRlbSwgcE5hbWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbXVsdGlXb3JkICYmXG4gICAgICAgICAgKHBOYW1lID09PSAncHJvcGVydGllcy5sYWJlbCcgfHwgcE5hbWUgPT09ICdhZGRyZXNzJykgJiZcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRyb3AgbGFzdCBwYXJ0cyBpLmUuIGNpdHkgYW5kIG5laWdoYm91cmhvb2RcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG11bHRpV29yZCkge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywvZywgJyAnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZihpbnB1dCkgPT09IDApIHtcbiAgICAgICAgICAvLyBhY2NlcHQgbWF0Y2ggb25seSBhdCB3b3JkIHN0YXJ0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGJvdW5kIHZlcnNpb24gb2YgYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmluZFxuICogQHBhcmFtIHsqfSB0aGlzQXJnIC0gVGhlIHZhbHVlIHRvIGJlIHBhc3NlZCBhcyB0aGUgYHRoaXNgIHBhcmFtZXRlclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGB0aGlzYCBjb250ZXh0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3QgeyB0b1N0cmluZyB9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHsgZ2V0UHJvdG90eXBlT2YgfSA9IE9iamVjdDtcbmNvbnN0IHsgaXRlcmF0b3IsIHRvU3RyaW5nVGFnIH0gPSBTeW1ib2w7XG5cbmNvbnN0IGtpbmRPZiA9ICgoY2FjaGUpID0+ICh0aGluZykgPT4ge1xuICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9ICh0eXBlKSA9PiAodGhpbmcpID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHsgaXNBcnJheSB9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIChcbiAgICB2YWwgIT09IG51bGwgJiZcbiAgICAhaXNVbmRlZmluZWQodmFsKSAmJlxuICAgIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJlxuICAgICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpICYmXG4gICAgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmXG4gICAgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbClcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB2YWwgJiYgdmFsLmJ1ZmZlciAmJiBpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSAodGhpbmcpID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChcbiAgICAocHJvdG90eXBlID09PSBudWxsIHx8XG4gICAgICBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJlxuICAgICEodG9TdHJpbmdUYWcgaW4gdmFsKSAmJlxuICAgICEoaXRlcmF0b3IgaW4gdmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QgKHNhZmVseSBoYW5kbGVzIEJ1ZmZlcnMpXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5T2JqZWN0ID0gKHZhbCkgPT4ge1xuICAvLyBFYXJseSByZXR1cm4gZm9yIG5vbi1vYmplY3RzIG9yIEJ1ZmZlcnMgdG8gcHJldmVudCBSYW5nZUVycm9yXG4gIGlmICghaXNPYmplY3QodmFsKSB8fCBpc0J1ZmZlcih2YWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDAgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCkgPT09IE9iamVjdC5wcm90b3R5cGU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBGYWxsYmFjayBmb3IgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtaWdodCBjYXVzZSBSYW5nZUVycm9yIHdpdGggT2JqZWN0LmtleXMoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlYWN0IE5hdGl2ZSBCbG9iXG4gKiBSZWFjdCBOYXRpdmUgXCJibG9iXCI6IGFuIG9iamVjdCB3aXRoIGEgYHVyaWAgYXR0cmlidXRlLiBPcHRpb25hbGx5LCBpdCBjYW5cbiAqIGFsc28gaGF2ZSBhIGBuYW1lYCBhbmQgYHR5cGVgIGF0dHJpYnV0ZSB0byBzcGVjaWZ5IGZpbGVuYW1lIGFuZCBjb250ZW50IHR5cGVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvYmxvYi8yNjY4NGNmM2FkZjQwOTRlYjZjNDA1ZDM0NWE3NWJmOGM3YzBiZjg4L0xpYnJhcmllcy9OZXR3b3JrL0Zvcm1EYXRhLmpzI0w2OC1MNzFcbiAqIFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlYWN0IE5hdGl2ZSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWFjdE5hdGl2ZUJsb2IgPSAodmFsdWUpID0+IHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS51cmkgIT09ICd1bmRlZmluZWQnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgZW52aXJvbm1lbnQgaXMgUmVhY3QgTmF0aXZlXG4gKiBSZWFjdE5hdGl2ZSBgRm9ybURhdGFgIGhhcyBhIG5vbi1zdGFuZGFyZCBgZ2V0UGFydHMoKWAgbWV0aG9kXG4gKiBcbiAqIEBwYXJhbSB7Kn0gZm9ybURhdGEgVGhlIGZvcm1EYXRhIHRvIHRlc3RcbiAqIFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgZW52aXJvbm1lbnQgaXMgUmVhY3QgTmF0aXZlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWFjdE5hdGl2ZSA9IChmb3JtRGF0YSkgPT4gZm9ybURhdGEgJiYgdHlwZW9mIGZvcm1EYXRhLmdldFBhcnRzICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBzZWxmO1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3aW5kb3c7XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGdsb2JhbDtcbiAgcmV0dXJuIHt9O1xufVxuXG5jb25zdCBHID0gZ2V0R2xvYmFsKCk7XG5jb25zdCBGb3JtRGF0YUN0b3IgPSB0eXBlb2YgRy5Gb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBHLkZvcm1EYXRhIDogdW5kZWZpbmVkO1xuXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgIChGb3JtRGF0YUN0b3IgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YUN0b3IpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gICk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFtcbiAgJ1JlYWRhYmxlU3RyZWFtJyxcbiAgJ1JlcXVlc3QnLFxuICAnUmVzcG9uc2UnLFxuICAnSGVhZGVycycsXG5dLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xufTtcbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5PHVua25vd24+fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmFsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwgeyBhbGxPd25LZXlzID0gZmFsc2UgfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBCdWZmZXIgY2hlY2tcbiAgICBpZiAoaXNCdWZmZXIob2JqKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyBhIGtleSBpbiBhbiBvYmplY3QsIGNhc2UtaW5zZW5zaXRpdmUsIHJldHVybmluZyB0aGUgYWN0dWFsIGtleSBuYW1lLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBvYmplY3QgaXMgYSBCdWZmZXIgb3IgaWYgbm8gbWF0Y2ggaXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSBvYmplY3QgdG8gc2VhcmNoLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gZmluZCAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBrZXkgbmFtZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAgaWYgKGlzQnVmZmVyKG9iaikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWw7XG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3QgeyBjYXNlbGVzcywgc2tpcFVuZGVmaW5lZCB9ID0gKGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcykgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIC8vIFNraXAgZGFuZ2Vyb3VzIHByb3BlcnR5IG5hbWVzIHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBrZXkgPT09ICdwcm90b3R5cGUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gKGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpKSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2UgaWYgKCFza2lwVW5kZWZpbmVkIHx8ICFpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHsgYWxsT3duS2V5cyB9ID0ge30pID0+IHtcbiAgZm9yRWFjaChcbiAgICBiLFxuICAgICh2YWwsIGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBrZXksIHtcbiAgICAgICAgICB2YWx1ZTogYmluZCh2YWwsIHRoaXNBcmcpLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBrZXksIHtcbiAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsT3duS2V5cyB9XG4gICk7XG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweGZlZmYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn07XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IucHJvdG90eXBlLCAnY29uc3RydWN0b3InLCB7XG4gICAgdmFsdWU6IGNvbnN0cnVjdG9yLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSxcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKChUeXBlZEFycmF5KSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodGhpbmcpID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbaXRlcmF0b3JdO1xuXG4gIGNvbnN0IF9pdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IF9pdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gKHN0cikgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZywgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgfSk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IChcbiAgKHsgaGFzT3duUHJvcGVydHkgfSkgPT5cbiAgKG9iaiwgcHJvcCkgPT5cbiAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcClcbikoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKFwiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJ1wiICsgbmFtZSArIFwiJ1wiKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb3IgYSBkZWxpbWl0ZWQgc3RyaW5nIGludG8gYW4gb2JqZWN0IHNldCB3aXRoIHZhbHVlcyBhcyBrZXlzIGFuZCB0cnVlIGFzIHZhbHVlcy5cbiAqIFVzZWZ1bCBmb3IgZmFzdCBtZW1iZXJzaGlwIGNoZWNrcy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gYXJyYXlPclN0cmluZyAtIFRoZSBhcnJheSBvciBzdHJpbmcgdG8gY29udmVydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWxpbWl0ZXIgLSBUaGUgZGVsaW1pdGVyIHRvIHVzZSBpZiBpbnB1dCBpcyBhIHN0cmluZy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGtleXMgZnJvbSB0aGUgYXJyYXkgb3Igc3RyaW5nLCB2YWx1ZXMgc2V0IHRvIHRydWUuXG4gKi9cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSgodmFsdWUgPSArdmFsdWUpKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKFxuICAgIHRoaW5nICYmXG4gICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmXG4gICAgdGhpbmdbdG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmXG4gICAgdGhpbmdbaXRlcmF0b3JdXG4gICk7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY29udmVydHMgYW4gb2JqZWN0IHRvIGEgSlNPTi1jb21wYXRpYmxlIG9iamVjdCwgaGFuZGxpbmcgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgQnVmZmVycy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gVGhlIEpTT04tY29tcGF0aWJsZSBvYmplY3QuXG4gKi9cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvL0J1ZmZlciBjaGVja1xuICAgICAgaWYgKGlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2UuXG4gKi9cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgdmFsdWUgaXMgdGhlbmFibGUgKGhhcyB0aGVuIGFuZCBjYXRjaCBtZXRob2RzKS5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyB0aGVuYWJsZSwgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJlxuICAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJlxuICBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmXG4gIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG4vKipcbiAqIFByb3ZpZGVzIGEgY3Jvc3MtcGxhdGZvcm0gc2V0SW1tZWRpYXRlIGltcGxlbWVudGF0aW9uLlxuICogVXNlcyBuYXRpdmUgc2V0SW1tZWRpYXRlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gcG9zdE1lc3NhZ2Ugb3Igc2V0VGltZW91dC5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNldEltbWVkaWF0ZVN1cHBvcnRlZCAtIFdoZXRoZXIgc2V0SW1tZWRpYXRlIGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgLSBXaGV0aGVyIHBvc3RNZXNzYWdlIGlzIHN1cHBvcnRlZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIGFzeW5jaHJvbm91c2x5LlxuICovXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkXG4gICAgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICAgICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdtZXNzYWdlJyxcbiAgICAgICAgICAoeyBzb3VyY2UsIGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgJyonKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pXG4gICAgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkodHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJywgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKSk7XG5cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrIG9yIGFzeW5jaHJvbm91cyBjYWxsYmFjayBhcyBzb29uIGFzIHBvc3NpYmxlLlxuICogVXNlcyBxdWV1ZU1pY3JvdGFzayBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHByb2Nlc3MubmV4dFRpY2sgb3IgX3NldEltbWVkaWF0ZS5cbiAqXG4gKiBAdHlwZSB7RnVuY3Rpb259XG4gKi9cbmNvbnN0IGFzYXAgPVxuICB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnXG4gICAgPyBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpXG4gICAgOiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2spIHx8IF9zZXRJbW1lZGlhdGU7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5jb25zdCBpc0l0ZXJhYmxlID0gKHRoaW5nKSA9PiB0aGluZyAhPSBudWxsICYmIGlzRnVuY3Rpb24odGhpbmdbaXRlcmF0b3JdKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNFbXB0eU9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNSZWFjdE5hdGl2ZUJsb2IsXG4gIGlzUmVhY3ROYXRpdmUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwLFxuICBpc0l0ZXJhYmxlLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY2xhc3MgQXhpb3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdGljIGZyb20oZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSB7XG4gICAgY29uc3QgYXhpb3NFcnJvciA9IG5ldyBBeGlvc0Vycm9yKGVycm9yLm1lc3NhZ2UsIGNvZGUgfHwgZXJyb3IuY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgICAvLyBQcmVzZXJ2ZSBzdGF0dXMgZnJvbSB0aGUgb3JpZ2luYWwgZXJyb3IgaWYgbm90IGFscmVhZHkgc2V0IGZyb20gcmVzcG9uc2VcbiAgICBpZiAoZXJyb3Iuc3RhdHVzICE9IG51bGwgJiYgYXhpb3NFcnJvci5zdGF0dXMgPT0gbnVsbCkge1xuICAgICAgYXhpb3NFcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgfVxuXG4gICAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG4gICAgcmV0dXJuIGF4aW9zRXJyb3I7XG4gIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgXG4gICAgICAvLyBNYWtlIG1lc3NhZ2UgZW51bWVyYWJsZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAvLyBUaGUgbmF0aXZlIEVycm9yIGNvbnN0cnVjdG9yIHNldHMgbWVzc2FnZSBhcyBub24tZW51bWVyYWJsZSxcbiAgICAgIC8vIGJ1dCBheGlvcyA8IHYxLjEzLjMgaGFkIGl0IGFzIGVudW1lcmFibGVcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbWVzc2FnZScsIHtcbiAgICAgICAgICB2YWx1ZTogbWVzc2FnZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgICAgIHRoaXMuaXNBeGlvc0Vycm9yID0gdHJ1ZTtcbiAgICAgIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICAgICAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gICAgICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgIH1cbiAgICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIH07XG4gIH1cbn1cblxuLy8gVGhpcyBjYW4gYmUgY2hhbmdlZCB0byBzdGF0aWMgcHJvcGVydGllcyBhcyBzb29uIGFzIHRoZSBwYXJzZXIgb3B0aW9ucyBpbiAuZXNsaW50LmNqcyBhcmUgdXBkYXRlZC5cbkF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUgPSAnRVJSX0JBRF9PUFRJT05fVkFMVUUnO1xuQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTiA9ICdFUlJfQkFEX09QVElPTic7XG5BeGlvc0Vycm9yLkVDT05OQUJPUlRFRCA9ICdFQ09OTkFCT1JURUQnO1xuQXhpb3NFcnJvci5FVElNRURPVVQgPSAnRVRJTUVET1VUJztcbkF4aW9zRXJyb3IuRVJSX05FVFdPUksgPSAnRVJSX05FVFdPUksnO1xuQXhpb3NFcnJvci5FUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTID0gJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnO1xuQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRCA9ICdFUlJfREVQUkVDQVRFRCc7XG5BeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UgPSAnRVJSX0JBRF9SRVNQT05TRSc7XG5BeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCA9ICdFUlJfQkFEX1JFUVVFU1QnO1xuQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQgPSAnRVJSX0NBTkNFTEVEJztcbkF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JUID0gJ0VSUl9OT1RfU1VQUE9SVCc7XG5BeGlvc0Vycm9yLkVSUl9JTlZBTElEX1VSTCA9ICdFUlJfSU5WQUxJRF9VUkwnO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aFxuICAgIC5jb25jYXQoa2V5KVxuICAgIC5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgICB9KVxuICAgIC5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3QoXG4gICAgb3B0aW9ucyxcbiAgICB7XG4gICAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgICAgZG90czogZmFsc2UsXG4gICAgICBpbmRleGVzOiBmYWxzZSxcbiAgICB9LFxuICAgIGZhbHNlLFxuICAgIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gICAgfVxuICApO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2IpO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVhY3ROYXRpdmUoZm9ybURhdGEpICYmIHV0aWxzLmlzUmVhY3ROYXRpdmVCbG9iKHZhbHVlKSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSkpXG4gICAgICApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpXG4gICAgICAgICAgICAgICAgOiBpbmRleGVzID09PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IGtleVxuICAgICAgICAgICAgICAgICAgOiBrZXkgKyAnW10nLFxuICAgICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlLFxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmXG4gICAgICAgIHZpc2l0b3IuY2FsbChmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVycyk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnLFxuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyXG4gICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgICAgIH1cbiAgICA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnNcbiAgICAubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICAgIH0sICcnKVxuICAgIC5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBVUkwtZW5jb2RlZCBmb3JtcyBvZiBgOmAsIGAkYCwgYCxgLCBhbmQgc3BhY2VzIHdpdGhcbiAqIHRoZWlyIHBsYWluIGNvdW50ZXJwYXJ0cyAoYDpgLCBgJGAsIGAsYCwgYCtgKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKVxuICAgIC5yZXBsYWNlKC8lM0EvZ2ksICc6JylcbiAgICAucmVwbGFjZSgvJTI0L2csICckJylcbiAgICAucmVwbGFjZSgvJTJDL2dpLCAnLCcpXG4gICAgLnJlcGxhY2UoLyUyMC9nLCAnKycpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7PyhvYmplY3R8RnVuY3Rpb24pfSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgY29uc3QgX2VuY29kZSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlKSB8fCBlbmNvZGU7XG5cbiAgY29uc3QgX29wdGlvbnMgPSB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpXG4gICAgPyB7XG4gICAgICAgIHNlcmlhbGl6ZTogb3B0aW9ucyxcbiAgICAgIH1cbiAgICA6IG9wdGlvbnM7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBfb3B0aW9ucyAmJiBfb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgX29wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpXG4gICAgICA/IHBhcmFtcy50b1N0cmluZygpXG4gICAgICA6IG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIF9vcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIGludGVyY2VwdG9yLCBzeW5jaHJvbm91cyBhbmQgcnVuV2hlblxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGwsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZSxcbiAgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzogdHJ1ZSxcbn07XG4iLCJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2IsXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG4iLCJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuY29uc3QgX25hdmlnYXRvciA9ICh0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IpIHx8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9XG4gIGhhc0Jyb3dzZXJFbnYgJiZcbiAgKCFfbmF2aWdhdG9yIHx8IFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihfbmF2aWdhdG9yLnByb2R1Y3QpIDwgMCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IChoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmKSB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luLFxufTtcbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuL25vZGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9jb21tb24vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKChtYXRjaCkgPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtcbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcblxuICAgICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgICB1dGlscy5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgICAgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgIH1cbiAgICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHxcbiAgICAgICAgICBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgICAgaXNGaWxlTGlzdCA/IHsgJ2ZpbGVzW10nOiBkYXRhIH0gOiBkYXRhLFxuICAgICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG4gIF0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtcbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBkYXRhICYmXG4gICAgICAgIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmXG4gICAgICAgICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEsIHRoaXMucGFyc2VSZXZpdmVyKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG4gIF0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYixcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkLFxuICAgIH0sXG4gIH0sXG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCB7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24gKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJyxcbiAgJ2F1dGhvcml6YXRpb24nLFxuICAnY29udGVudC1sZW5ndGgnLFxuICAnY29udGVudC10eXBlJyxcbiAgJ2V0YWcnLFxuICAnZXhwaXJlcycsXG4gICdmcm9tJyxcbiAgJ2hvc3QnLFxuICAnaWYtbW9kaWZpZWQtc2luY2UnLFxuICAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJyxcbiAgJ2xvY2F0aW9uJyxcbiAgJ21heC1mb3J3YXJkcycsXG4gICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLFxuICAncmV0cnktYWZ0ZXInLFxuICAndXNlci1hZ2VudCcsXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IChyYXdIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmXG4gICAgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJWYWx1ZSA9ICh2YWx1ZSkgPT4gIS9bXFxyXFxuXS8udGVzdCh2YWx1ZSk7XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkSGVhZGVyVmFsdWUodmFsdWUsIGhlYWRlcikge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodXRpbHMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKCh2KSA9PiBhc3NlcnRWYWxpZEhlYWRlclZhbHVlKHYsIGhlYWRlcikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKFN0cmluZyh2YWx1ZSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgY29udGVudCBbXCIke2hlYWRlcn1cIl1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdDUkxGKHN0cikge1xuICBsZXQgZW5kID0gc3RyLmxlbmd0aDtcblxuICB3aGlsZSAoZW5kID4gMCkge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoZW5kIC0gMSk7XG5cbiAgICBpZiAoY2hhckNvZGUgIT09IDEwICYmIGNoYXJDb2RlICE9PSAxMykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZW5kIC09IDE7XG4gIH1cblxuICByZXR1cm4gZW5kID09PSBzdHIubGVuZ3RoID8gc3RyIDogc3RyLnNsaWNlKDAsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBzdHJpcFRyYWlsaW5nQ1JMRihTdHJpbmcodmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyXG4gICAgLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWtleSB8fFxuICAgICAgICBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBfcmV3cml0ZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKVxuICAgICAgKSB7XG4gICAgICAgIGFzc2VydFZhbGlkSGVhZGVyVmFsdWUoX3ZhbHVlLCBfaGVhZGVyKTtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoaGVhZGVyKSAmJiB1dGlscy5pc0l0ZXJhYmxlKGhlYWRlcikpIHtcbiAgICAgIGxldCBvYmogPSB7fSxcbiAgICAgICAgZGVzdCxcbiAgICAgICAga2V5O1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBoZWFkZXIpIHtcbiAgICAgICAgaWYgKCF1dGlscy5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignT2JqZWN0IGl0ZXJhdG9yIG11c3QgcmV0dXJuIGEga2V5LXZhbHVlIHBhaXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ialsoa2V5ID0gZW50cnlbMF0pXSA9IChkZXN0ID0gb2JqW2tleV0pXG4gICAgICAgICAgPyB1dGlscy5pc0FycmF5KGRlc3QpXG4gICAgICAgICAgICA/IFsuLi5kZXN0LCBlbnRyeVsxXV1cbiAgICAgICAgICAgIDogW2Rlc3QsIGVudHJ5WzFdXVxuICAgICAgICAgIDogZW50cnlbMV07XG4gICAgICB9XG5cbiAgICAgIHNldEhlYWRlcnMob2JqLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShcbiAgICAgICAga2V5ICYmXG4gICAgICAgIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgdmFsdWUgIT09IGZhbHNlICYmXG4gICAgICAgIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVxuICAgICAgLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpXG4gICAgICAuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXRTZXRDb29raWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzZXQtY29va2llJykgfHwgW107XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9XG4gICAgICAodGhpc1skaW50ZXJuYWxzXSA9XG4gICAgICB0aGlzWyRpbnRlcm5hbHNdID1cbiAgICAgICAge1xuICAgICAgICAgIGFjY2Vzc29yczoge30sXG4gICAgICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbXG4gICdDb250ZW50LVR5cGUnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQWNjZXB0JyxcbiAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICdVc2VyLUFnZW50JyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHsgdmFsdWUgfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH0sXG4gIH07XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY2xhc3MgQ2FuY2VsZWRFcnJvciBleHRlbmRzIEF4aW9zRXJyb3Ige1xuICAvKipcbiAgICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgc3VwZXIobWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICAgIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbiAgICB0aGlzLl9fQ0FOQ0VMX18gPSB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QoXG4gICAgICBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW1xuICAgICAgICAgIE1hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRcbiAgICAgICAgXSxcbiAgICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgICByZXNwb25zZVxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBzcGVlZG9tZXRlciBmcm9tICcuL3NwZWVkb21ldGVyLmpzJztcbmltcG9ydCB0aHJvdHRsZSBmcm9tICcuL3Rocm90dGxlLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoKGUpID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IGxvYWRlZCAvIHRvdGFsIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWUsXG4gICAgfTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFtcbiAgICAobG9hZGVkKSA9PlxuICAgICAgdGhyb3R0bGVkWzBdKHtcbiAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIGxvYWRlZCxcbiAgICAgIH0pLFxuICAgIHRocm90dGxlZFsxXSxcbiAgXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3luY0RlY29yYXRvciA9XG4gIChmbikgPT5cbiAgKC4uLmFyZ3MpID0+XG4gICAgdXRpbHMuYXNhcCgoKSA9PiBmbiguLi5hcmdzKSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZCgoYnl0ZXNDb3VudCAqIDEwMDApIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3BlZWRvbWV0ZXI7XG4iLCIvKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGxldCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IGxhc3RBcmdzO1xuICBsZXQgdGltZXI7XG5cbiAgY29uc3QgaW52b2tlID0gKGFyZ3MsIG5vdyA9IERhdGUubm93KCkpID0+IHtcbiAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZm4oLi4uYXJncyk7XG4gIH07XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAocGFzc2VkID49IHRocmVzaG9sZCkge1xuICAgICAgaW52b2tlKGFyZ3MsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgaW52b2tlKGxhc3RBcmdzKTtcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocm90dGxlO1xuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52XG4gID8gKChvcmlnaW4sIGlzTVNJRSkgPT4gKHVybCkgPT4ge1xuICAgICAgdXJsID0gbmV3IFVSTCh1cmwsIHBsYXRmb3JtLm9yaWdpbik7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIG9yaWdpbi5wcm90b2NvbCA9PT0gdXJsLnByb3RvY29sICYmXG4gICAgICAgIG9yaWdpbi5ob3N0ID09PSB1cmwuaG9zdCAmJlxuICAgICAgICAoaXNNU0lFIHx8IG9yaWdpbi5wb3J0ID09PSB1cmwucG9ydClcbiAgICAgICk7XG4gICAgfSkoXG4gICAgICBuZXcgVVJMKHBsYXRmb3JtLm9yaWdpbiksXG4gICAgICBwbGF0Zm9ybS5uYXZpZ2F0b3IgJiYgLyhtc2llfHRyaWRlbnQpL2kudGVzdChwbGF0Zm9ybS5uYXZpZ2F0b3IudXNlckFnZW50KVxuICAgIClcbiAgOiAoKSA9PiB0cnVlO1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudlxuICA/IC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIHtcbiAgICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSwgc2FtZVNpdGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb29raWUgPSBbYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWBdO1xuXG4gICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKGBleHBpcmVzPSR7bmV3IERhdGUoZXhwaXJlcykudG9VVENTdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgcGF0aD0ke3BhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICBjb29raWUucHVzaChgZG9tYWluPSR7ZG9tYWlufWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHNhbWVTaXRlKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKGBTYW1lU2l0ZT0ke3NhbWVTaXRlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICB9LFxuXG4gICAgICByZWFkKG5hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoPzpefDsgKScgKyBuYW1lICsgJz0oW147XSopJykpO1xuICAgICAgICByZXR1cm4gbWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbMV0pIDogbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCwgJy8nKTtcbiAgICAgIH0sXG4gICAgfVxuICA6IC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICB7XG4gICAgICB3cml0ZSgpIHt9LFxuICAgICAgcmVhZCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlKCkge30sXG4gICAgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMLCBhbGxvd0Fic29sdXRlVXJscykge1xuICBsZXQgaXNSZWxhdGl2ZVVybCA9ICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCk7XG4gIGlmIChiYXNlVVJMICYmIChpc1JlbGF0aXZlVXJsIHx8IGFsbG93QWJzb2x1dGVVcmxzID09IGZhbHNlKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiAodGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBwcm9wLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7IGNhc2VsZXNzIH0sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIHByb3AsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIHByb3AsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgcHJvcCwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiLCBwcm9wKSA9PlxuICAgICAgbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgcHJvcCwgdHJ1ZSksXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyh7IC4uLmNvbmZpZzEsIC4uLmNvbmZpZzIgfSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdfX3Byb3RvX18nIHx8IHByb3AgPT09ICdjb25zdHJ1Y3RvcicgfHwgcHJvcCA9PT0gJ3Byb3RvdHlwZScpIHJldHVybjtcbiAgICBjb25zdCBtZXJnZSA9IHV0aWxzLmhhc093blByb3AobWVyZ2VNYXAsIHByb3ApID8gbWVyZ2VNYXBbcHJvcF0gOiBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gJy4vaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCBjb29raWVzIGZyb20gJy4vY29va2llcy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4uL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi9idWlsZFVSTC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHsgZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRoIH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKFxuICAgIGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwsIG5ld0NvbmZpZy5hbGxvd0Fic29sdXRlVXJscyksXG4gICAgY29uZmlnLnBhcmFtcyxcbiAgICBjb25maWcucGFyYW1zU2VyaWFsaXplclxuICApO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldChcbiAgICAgICdBdXRob3JpemF0aW9uJyxcbiAgICAgICdCYXNpYyAnICtcbiAgICAgICAgYnRvYShcbiAgICAgICAgICAoYXV0aC51c2VybmFtZSB8fCAnJykgK1xuICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gYnJvd3NlciBoYW5kbGVzIGl0XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0Z1bmN0aW9uKGRhdGEuZ2V0SGVhZGVycykpIHtcbiAgICAgIC8vIE5vZGUuanMgRm9ybURhdGEgKGxpa2UgZm9ybS1kYXRhIHBhY2thZ2UpXG4gICAgICBjb25zdCBmb3JtSGVhZGVycyA9IGRhdGEuZ2V0SGVhZGVycygpO1xuICAgICAgLy8gT25seSBzZXQgc2FmZSBoZWFkZXJzIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHNlY3VyaXR5IGhlYWRlcnNcbiAgICAgIGNvbnN0IGFsbG93ZWRIZWFkZXJzID0gWydjb250ZW50LXR5cGUnLCAnY29udGVudC1sZW5ndGgnXTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZvcm1IZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgIGlmIChhbGxvd2VkSGVhZGVycy5pbmNsdWRlcyhrZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICBoZWFkZXJzLnNldChrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn07XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgcGFyc2VQcm90b2NvbCBmcm9tICcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IHsgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgfSBmcm9tICcuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzJztcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gJy4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qcyc7XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJlxuICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgICBsZXQgeyByZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzcyB9ID0gX2NvbmZpZztcbiAgICAgIGxldCBvbkNhbmNlbGVkO1xuICAgICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKFxuICAgICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPVxuICAgICAgICAgICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbidcbiAgICAgICAgICAgID8gcmVxdWVzdC5yZXNwb25zZVRleHRcbiAgICAgICAgICAgIDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgfTtcblxuICAgICAgICBzZXR0bGUoXG4gICAgICAgICAgZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlcXVlc3Quc3RhdHVzID09PSAwICYmXG4gICAgICAgICAgICAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcihldmVudCkge1xuICAgICAgICAvLyBCcm93c2VycyBkZWxpdmVyIGEgUHJvZ3Jlc3NFdmVudCBpbiBYSFIgb25lcnJvclxuICAgICAgICAvLyAobWVzc2FnZSBtYXkgYmUgZW1wdHk7IHdoZW4gcHJlc2VudCwgc3VyZmFjZSBpdClcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9lcnJvcl9ldmVudFxuICAgICAgICBjb25zdCBtc2cgPSBldmVudCAmJiBldmVudC5tZXNzYWdlID8gZXZlbnQubWVzc2FnZSA6ICdOZXR3b3JrIEVycm9yJztcbiAgICAgICAgY29uc3QgZXJyID0gbmV3IEF4aW9zRXJyb3IobXNnLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgICAvLyBhdHRhY2ggdGhlIHVuZGVybHlpbmcgZXZlbnQgZm9yIGNvbnN1bWVycyB3aG8gd2FudCBkZXRhaWxzXG4gICAgICAgIGVyci5ldmVudCA9IGV2ZW50IHx8IG51bGw7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0XG4gICAgICAgICAgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJ1xuICAgICAgICAgIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgICBbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKTtcbiAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAgIFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpO1xuXG4gICAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICAgIG9uQ2FuY2VsZWQgPSAoY2FuY2VsKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWRcbiAgICAgICAgICAgID8gb25DYW5jZWxlZCgpXG4gICAgICAgICAgICA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgICB9KTtcbiAgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCAnJztcbn1cbiIsImltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSAoc2lnbmFscyA9IHNpZ25hbHMgPyBzaWduYWxzLmZpbHRlcihCb29sZWFuKSA6IFtdKTtcblxuICBpZiAodGltZW91dCB8fCBsZW5ndGgpIHtcbiAgICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGxldCBhYm9ydGVkO1xuXG4gICAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgZXJyID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiB0aGlzLnJlYXNvbjtcbiAgICAgICAgY29udHJvbGxlci5hYm9ydChcbiAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yXG4gICAgICAgICAgICA/IGVyclxuICAgICAgICAgICAgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsZXQgdGltZXIgPVxuICAgICAgdGltZW91dCAmJlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCBvZiAke3RpbWVvdXR9bXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpO1xuICAgICAgfSwgdGltZW91dCk7XG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgICAgICBzaWduYWwudW5zdWJzY3JpYmVcbiAgICAgICAgICAgID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpXG4gICAgICAgICAgICA6IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2lnbmFscyA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgICBjb25zdCB7IHNpZ25hbCB9ID0gY29udHJvbGxlcjtcblxuICAgIHNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHV0aWxzLmFzYXAodW5zdWJzY3JpYmUpO1xuXG4gICAgcmV0dXJuIHNpZ25hbDtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVNpZ25hbHM7XG4iLCJleHBvcnQgY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZFN0cmVhbShpdGVyYWJsZSkpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoY2h1bmssIGNodW5rU2l6ZSk7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRTdHJlYW0gPSBhc3luYyBmdW5jdGlvbiogKHN0cmVhbSkge1xuICBpZiAoc3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHlpZWxkKiBzdHJlYW07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG4gIGxldCBkb25lO1xuICBsZXQgX29uRmluaXNoID0gKGUpID0+IHtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgb25GaW5pc2ggJiYgb25GaW5pc2goZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSAoYnl0ZXMgKz0gbGVuKTtcbiAgICAgICAgICAgIG9uUHJvZ3Jlc3MobG9hZGVkQnl0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgICBfb25GaW5pc2gocmVhc29uKTtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGhpZ2hXYXRlck1hcms6IDIsXG4gICAgfVxuICApO1xufTtcbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tICcuLi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzJztcbmltcG9ydCB7IHRyYWNrU3RyZWFtIH0gZnJvbSAnLi4vaGVscGVycy90cmFja1N0cmVhbS5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7XG4gIHByb2dyZXNzRXZlbnRSZWR1Y2VyLFxuICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yLFxuICBhc3luY0RlY29yYXRvcixcbn0gZnJvbSAnLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyc7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tICcuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLi9jb3JlL3NldHRsZS5qcyc7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3QgeyBpc0Z1bmN0aW9uIH0gPSB1dGlscztcblxuY29uc3QgZ2xvYmFsRmV0Y2hBUEkgPSAoKHsgUmVxdWVzdCwgUmVzcG9uc2UgfSkgPT4gKHtcbiAgUmVxdWVzdCxcbiAgUmVzcG9uc2UsXG59KSkodXRpbHMuZ2xvYmFsKTtcblxuY29uc3QgeyBSZWFkYWJsZVN0cmVhbSwgVGV4dEVuY29kZXIgfSA9IHV0aWxzLmdsb2JhbDtcblxuY29uc3QgdGVzdCA9IChmbiwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIWZuKC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBmYWN0b3J5ID0gKGVudikgPT4ge1xuICBlbnYgPSB1dGlscy5tZXJnZS5jYWxsKFxuICAgIHtcbiAgICAgIHNraXBVbmRlZmluZWQ6IHRydWUsXG4gICAgfSxcbiAgICBnbG9iYWxGZXRjaEFQSSxcbiAgICBlbnZcbiAgKTtcblxuICBjb25zdCB7IGZldGNoOiBlbnZGZXRjaCwgUmVxdWVzdCwgUmVzcG9uc2UgfSA9IGVudjtcbiAgY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IGVudkZldGNoID8gaXNGdW5jdGlvbihlbnZGZXRjaCkgOiB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGlzUmVxdWVzdFN1cHBvcnRlZCA9IGlzRnVuY3Rpb24oUmVxdWVzdCk7XG4gIGNvbnN0IGlzUmVzcG9uc2VTdXBwb3J0ZWQgPSBpc0Z1bmN0aW9uKFJlc3BvbnNlKTtcblxuICBpZiAoIWlzRmV0Y2hTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiBpc0Z1bmN0aW9uKFJlYWRhYmxlU3RyZWFtKTtcblxuICBjb25zdCBlbmNvZGVUZXh0ID1cbiAgICBpc0ZldGNoU3VwcG9ydGVkICYmXG4gICAgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoXG4gICAgICAgICAgKGVuY29kZXIpID0+IChzdHIpID0+XG4gICAgICAgICAgICBlbmNvZGVyLmVuY29kZShzdHIpXG4gICAgICAgICkobmV3IFRleHRFbmNvZGVyKCkpXG4gICAgICA6IGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXF1ZXN0KHN0cikuYXJyYXlCdWZmZXIoKSkpO1xuXG4gIGNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9XG4gICAgaXNSZXF1ZXN0U3VwcG9ydGVkICYmXG4gICAgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICAgIHRlc3QoKCkgPT4ge1xuICAgICAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGJvZHkgPSBuZXcgUmVhZGFibGVTdHJlYW0oKTtcblxuICAgICAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiAnaGFsZic7XG4gICAgICAgIH0sXG4gICAgICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgICAgIGJvZHkuY2FuY2VsKCk7XG5cbiAgICAgIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG4gICAgfSk7XG5cbiAgY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9XG4gICAgaXNSZXNwb25zZVN1cHBvcnRlZCAmJlxuICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgICB0ZXN0KCgpID0+IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cbiAgY29uc3QgcmVzb2x2ZXJzID0ge1xuICAgIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpLFxuICB9O1xuXG4gIGlzRmV0Y2hTdXBwb3J0ZWQgJiZcbiAgICAoKCkgPT4ge1xuICAgICAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICAhcmVzb2x2ZXJzW3R5cGVdICYmXG4gICAgICAgICAgKHJlc29sdmVyc1t0eXBlXSA9IChyZXMsIGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgbGV0IG1ldGhvZCA9IHJlcyAmJiByZXNbdHlwZV07XG5cbiAgICAgICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5jYWxsKHJlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgICBgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULFxuICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuXG4gIGNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICAgIGlmIChib2R5ID09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Jsb2IoYm9keSkpIHtcbiAgICAgIHJldHVybiBib2R5LnNpemU7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpIHx8IHV0aWxzLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgICBib2R5ID0gYm9keSArICcnO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc1N0cmluZyhib2R5KSkge1xuICAgICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gICAgcmV0dXJuIGxlbmd0aCA9PSBudWxsID8gZ2V0Qm9keUxlbmd0aChib2R5KSA6IGxlbmd0aDtcbiAgfTtcblxuICByZXR1cm4gYXN5bmMgKGNvbmZpZykgPT4ge1xuICAgIGxldCB7XG4gICAgICB1cmwsXG4gICAgICBtZXRob2QsXG4gICAgICBkYXRhLFxuICAgICAgc2lnbmFsLFxuICAgICAgY2FuY2VsVG9rZW4sXG4gICAgICB0aW1lb3V0LFxuICAgICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgICAgZmV0Y2hPcHRpb25zLFxuICAgIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgICBsZXQgX2ZldGNoID0gZW52RmV0Y2ggfHwgZmV0Y2g7XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhcbiAgICAgIFtzaWduYWwsIGNhbmNlbFRva2VuICYmIGNhbmNlbFRva2VuLnRvQWJvcnRTaWduYWwoKV0sXG4gICAgICB0aW1lb3V0XG4gICAgKTtcblxuICAgIGxldCByZXF1ZXN0ID0gbnVsbDtcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID1cbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmXG4gICAgICBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJlxuICAgICAgKCgpID0+IHtcbiAgICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJlxuICAgICAgICBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiZcbiAgICAgICAgbWV0aG9kICE9PSAnZ2V0JyAmJlxuICAgICAgICBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICAgICkge1xuICAgICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICAgIGR1cGxleDogJ2hhbGYnLFxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgICAgfVxuXG4gICAgICAvLyBDbG91ZGZsYXJlIFdvcmtlcnMgdGhyb3dzIHdoZW4gY3JlZGVudGlhbHMgYXJlIGRlZmluZWRcbiAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICAgIGNvbnN0IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPSBpc1JlcXVlc3RTdXBwb3J0ZWQgJiYgJ2NyZWRlbnRpYWxzJyBpbiBSZXF1ZXN0LnByb3RvdHlwZTtcblxuICAgICAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0ge1xuICAgICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogJ2hhbGYnLFxuICAgICAgICBjcmVkZW50aWFsczogaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA/IHdpdGhDcmVkZW50aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3QgPSBpc1JlcXVlc3RTdXBwb3J0ZWQgJiYgbmV3IFJlcXVlc3QodXJsLCByZXNvbHZlZE9wdGlvbnMpO1xuXG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCAoaXNSZXF1ZXN0U3VwcG9ydGVkXG4gICAgICAgID8gX2ZldGNoKHJlcXVlc3QsIGZldGNoT3B0aW9ucylcbiAgICAgICAgOiBfZmV0Y2godXJsLCByZXNvbHZlZE9wdGlvbnMpKTtcblxuICAgICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9XG4gICAgICAgIHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCAoaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSkpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9XG4gICAgICAgICAgKG9uRG93bmxvYWRQcm9ncmVzcyAmJlxuICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgICAgICAgKSkgfHxcbiAgICAgICAgICBbXTtcblxuICAgICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscy5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgY29uZmlnXG4gICAgICApO1xuXG4gICAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvTG9hZCBmYWlsZWR8ZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ05ldHdvcmsgRXJyb3InLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfTkVUV09SSyxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICBlcnIgJiYgZXJyLnJlc3BvbnNlXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVycixcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0LCBlcnIgJiYgZXJyLnJlc3BvbnNlKTtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBzZWVkQ2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRGZXRjaCA9IChjb25maWcpID0+IHtcbiAgbGV0IGVudiA9IChjb25maWcgJiYgY29uZmlnLmVudikgfHwge307XG4gIGNvbnN0IHsgZmV0Y2gsIFJlcXVlc3QsIFJlc3BvbnNlIH0gPSBlbnY7XG4gIGNvbnN0IHNlZWRzID0gW1JlcXVlc3QsIFJlc3BvbnNlLCBmZXRjaF07XG5cbiAgbGV0IGxlbiA9IHNlZWRzLmxlbmd0aCxcbiAgICBpID0gbGVuLFxuICAgIHNlZWQsXG4gICAgdGFyZ2V0LFxuICAgIG1hcCA9IHNlZWRDYWNoZTtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgc2VlZCA9IHNlZWRzW2ldO1xuICAgIHRhcmdldCA9IG1hcC5nZXQoc2VlZCk7XG5cbiAgICB0YXJnZXQgPT09IHVuZGVmaW5lZCAmJiBtYXAuc2V0KHNlZWQsICh0YXJnZXQgPSBpID8gbmV3IE1hcCgpIDogZmFjdG9yeShlbnYpKSk7XG5cbiAgICBtYXAgPSB0YXJnZXQ7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuY29uc3QgYWRhcHRlciA9IGdldEZldGNoKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGFkYXB0ZXI7XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgKiBhcyBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIEtub3duIGFkYXB0ZXJzIG1hcHBpbmcuXG4gKiBQcm92aWRlcyBlbnZpcm9ubWVudC1zcGVjaWZpYyBhZGFwdGVycyBmb3IgQXhpb3M6XG4gKiAtIGBodHRwYCBmb3IgTm9kZS5qc1xuICogLSBgeGhyYCBmb3IgYnJvd3NlcnNcbiAqIC0gYGZldGNoYCBmb3IgZmV0Y2ggQVBJLWJhc2VkIHJlcXVlc3RzXG4gKlxuICogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9ufE9iamVjdD59XG4gKi9cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiB7XG4gICAgZ2V0OiBmZXRjaEFkYXB0ZXIuZ2V0RmV0Y2gsXG4gIH0sXG59O1xuXG4vLyBBc3NpZ24gYWRhcHRlciBuYW1lcyBmb3IgZWFzaWVyIGRlYnVnZ2luZyBhbmQgaWRlbnRpZmljYXRpb25cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHsgdmFsdWUgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywgeyB2YWx1ZSB9KTtcbiAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVyIGEgcmVqZWN0aW9uIHJlYXNvbiBzdHJpbmcgZm9yIHVua25vd24gb3IgdW5zdXBwb3J0ZWQgYWRhcHRlcnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBhZGFwdGVyIGlzIHJlc29sdmVkIChmdW5jdGlvbiwgbnVsbCwgb3IgZmFsc2UpXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfGZhbHNlfSBhZGFwdGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PlxuICB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbi8qKlxuICogR2V0IHRoZSBmaXJzdCBzdWl0YWJsZSBhZGFwdGVyIGZyb20gdGhlIHByb3ZpZGVkIGxpc3QuXG4gKiBUcmllcyBlYWNoIGFkYXB0ZXIgaW4gb3JkZXIgdW50aWwgYSBzdXBwb3J0ZWQgb25lIGlzIGZvdW5kLlxuICogVGhyb3dzIGFuIEF4aW9zRXJyb3IgaWYgbm8gYWRhcHRlciBpcyBzdWl0YWJsZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZ3xGdW5jdGlvbj58c3RyaW5nfEZ1bmN0aW9ufSBhZGFwdGVycyAtIEFkYXB0ZXIocykgYnkgbmFtZSBvciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBBeGlvcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3Mge0F4aW9zRXJyb3J9IElmIG5vIHN1aXRhYmxlIGFkYXB0ZXIgaXMgYXZhaWxhYmxlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSByZXNvbHZlZCBhZGFwdGVyIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEFkYXB0ZXIoYWRhcHRlcnMsIGNvbmZpZykge1xuICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBhZGFwdGVycztcbiAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gIGxldCBhZGFwdGVyO1xuXG4gIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgbGV0IGlkO1xuXG4gICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkYXB0ZXIgJiYgKHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgKGFkYXB0ZXIgPSBhZGFwdGVyLmdldChjb25maWcpKSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gIH1cblxuICBpZiAoIWFkYXB0ZXIpIHtcbiAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKS5tYXAoXG4gICAgICAoW2lkLCBzdGF0ZV0pID0+XG4gICAgICAgIGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgKTtcblxuICAgIGxldCBzID0gbGVuZ3RoXG4gICAgICA/IHJlYXNvbnMubGVuZ3RoID4gMVxuICAgICAgICA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJylcbiAgICAgICAgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSlcbiAgICAgIDogJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuLyoqXG4gKiBFeHBvcnRzIEF4aW9zIGFkYXB0ZXJzIGFuZCB1dGlsaXR5IHRvIHJlc29sdmUgYW4gYWRhcHRlclxuICovXG5leHBvcnQgZGVmYXVsdCB7XG4gIC8qKlxuICAgKiBSZXNvbHZlIGFuIGFkYXB0ZXIgZnJvbSBhIGxpc3Qgb2YgYWRhcHRlciBuYW1lcyBvciBmdW5jdGlvbnMuXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIGdldEFkYXB0ZXIsXG5cbiAgLyoqXG4gICAqIEV4cG9zZXMgYWxsIGtub3duIGFkYXB0ZXJzXG4gICAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBGdW5jdGlvbnxPYmplY3Q+fVxuICAgKi9cbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnMsXG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gJy4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKGNvbmZpZywgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3QpO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlciwgY29uZmlnKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oXG4gICAgZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChjb25maWcsIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSwgcmVzcG9uc2UpO1xuXG4gICAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxuICAgIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgfVxuICApO1xufVxuIiwiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuMTUuMFwiOyIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gJy4uL2Vudi9kYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICdbQXhpb3MgdicgK1xuICAgICAgVkVSU0lPTiArXG4gICAgICBcIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnXCIgK1xuICAgICAgb3B0ICtcbiAgICAgIFwiJ1wiICtcbiAgICAgIGRlc2MgK1xuICAgICAgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKVxuICAgICk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxudmFsaWRhdG9ycy5zcGVsbGluZyA9IGZ1bmN0aW9uIHNwZWxsaW5nKGNvcnJlY3RTcGVsbGluZykge1xuICByZXR1cm4gKHZhbHVlLCBvcHQpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgJHtvcHR9IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7Y29ycmVjdFNwZWxsaW5nfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAnb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnMsXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IEludGVyY2VwdG9yTWFuYWdlciBmcm9tICcuL0ludGVyY2VwdG9yTWFuYWdlci5qcyc7XG5pbXBvcnQgZGlzcGF0Y2hSZXF1ZXN0IGZyb20gJy4vZGlzcGF0Y2hSZXF1ZXN0LmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4vYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJy4uL2hlbHBlcnMvdmFsaWRhdG9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZyB8fCB7fTtcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXkgPSB7fTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9ICgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFkdW1teS5zdGFjaykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpcnN0TmV3bGluZUluZGV4ID0gZHVtbXkuc3RhY2suaW5kZXhPZignXFxuJyk7XG5cbiAgICAgICAgICByZXR1cm4gZmlyc3ROZXdsaW5lSW5kZXggPT09IC0xID8gJycgOiBkdW1teS5zdGFjay5zbGljZShmaXJzdE5ld2xpbmVJbmRleCArIDEpO1xuICAgICAgICB9KSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjaykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3ROZXdsaW5lSW5kZXggPSBzdGFjay5pbmRleE9mKCdcXG4nKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZE5ld2xpbmVJbmRleCA9XG4gICAgICAgICAgICAgIGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSA/IC0xIDogc3RhY2suaW5kZXhPZignXFxuJywgZmlyc3ROZXdsaW5lSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrV2l0aG91dFR3b1RvcExpbmVzID1cbiAgICAgICAgICAgICAgc2Vjb25kTmV3bGluZUluZGV4ID09PSAtMSA/ICcnIDogc3RhY2suc2xpY2Uoc2Vjb25kTmV3bGluZUluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIGlmICghU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2tXaXRob3V0VHdvVG9wTGluZXMpKSB7XG4gICAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3QgeyB0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnMgfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoXG4gICAgICAgIHRyYW5zaXRpb25hbCxcbiAgICAgICAge1xuICAgICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgICAgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMoXG4gICAgICAgICAgcGFyYW1zU2VyaWFsaXplcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5hbGxvd0Fic29sdXRlVXJsc1xuICAgIGlmIChjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKFxuICAgICAgY29uZmlnLFxuICAgICAge1xuICAgICAgICBiYXNlVXJsOiB2YWxpZGF0b3JzLnNwZWxsaW5nKCdiYXNlVVJMJyksXG4gICAgICAgIHdpdGhYc3JmVG9rZW46IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ3dpdGhYU1JGVG9rZW4nKSxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShoZWFkZXJzLmNvbW1vbiwgaGVhZGVyc1tjb25maWcubWV0aG9kXSk7XG5cbiAgICBoZWFkZXJzICYmXG4gICAgICB1dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLCAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9KTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgY29uc3QgbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZyA9XG4gICAgICAgIHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwubGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZztcblxuICAgICAgaWYgKGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmcpIHtcbiAgICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQoLi4ucmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaCguLi5yZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsLCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICAgIG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiBpc0Zvcm1cbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbigoY2FuY2VsKSA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gKG9uZnVsZmlsbGVkKSA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHRvQWJvcnRTaWduYWwoKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGFib3J0ID0gKGVycikgPT4ge1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIpO1xuICAgIH07XG5cbiAgICB0aGlzLnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICBjb250cm9sbGVyLnNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHRoaXMudW5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbiAgV2ViU2VydmVySXNEb3duOiA1MjEsXG4gIENvbm5lY3Rpb25UaW1lZE91dDogNTIyLFxuICBPcmlnaW5Jc1VucmVhY2hhYmxlOiA1MjMsXG4gIFRpbWVvdXRPY2N1cnJlZDogNTI0LFxuICBTc2xIYW5kc2hha2VGYWlsZWQ6IDUyNSxcbiAgSW52YWxpZFNzbENlcnRpZmljYXRlOiA1MjYsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHsgYWxsT3duS2V5czogdHJ1ZSB9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7IGFsbE93bktleXM6IHRydWUgfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gKHRoaW5nKSA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICBjb25zdCBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiBwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZTtcbn1cbiIsIi8qKlxuICogU2VyaWFsaXplcyBvYmplY3RzXG4gKlxuICogQG5hbWUgc2VyaWFsaXplXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gKiBAcGFyYW0ge0FueX0gcHJlZml4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBTZXJpYWxpemVkIG9iamVjdFxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnNlcmlhbGl6ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmosIHByZWZpeCkge1xuICBpZiAoIW9iaikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIC5tYXAocCA9PiB7XG4gICAgICBjb25zdCBrID0gcHJlZml4IHx8IHA7XG4gICAgICBjb25zdCB2ID0gb2JqW3BdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VyaWFsaXplKHYsIGspXG4gICAgICAgIDogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuY29uc3QgREVGQVVMVF9QRUxJQVNfVVJMID0gJ2h0dHBzOi8vYXBpLmRpZ2l0cmFuc2l0LmZpL2dlb2NvZGluZy92MS9zZWFyY2gnO1xuLyoqXG4gKiA8REVTQ1JJUFRJT04+XG4gKlxuICogQG5hbWUgZ2V0R2VvY29kaW5nUmVzdWx0c1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFBhcmFtcyAoT3B0aW9uYWwpIFBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdXJsLCBiYXNpY2FsbHkgYm94IC8gcG9seWdvbiB0byByZXN0cmljdCBzZWFyY2ggYXJlYVxuICogQHBhcmFtIHtTdHJpbmd9IGxhbmcgKE9wdGlvbmFsKSBzZWFyY2ggbGFuZ3VhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb2N1c1BvaW50IChPcHRpb25hbCkgT3duIFBvc2l0aW9uIChQRUxJQVMgQVBJKVxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZXMgKE9wdGlvbmFsKSBzZWFyY2ggc291cmNlcyAoZS5nIE9TTSwgR1RGUy4uKVxuICogQHBhcmFtIHtPYmplY3R9IG1pbmltYWxSZWdleHAgKE9wdGlvbmFsKSBSZWdleHAgZm9yIHRlc3RpbmdcbiAqIEBwYXJhbSB7Kn0gZ2VvY29kaW5nTGF5ZXJzIChPcHRpb25hbCkgQXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxheWVycyBpcyBzZWFyY2hlZCwgZS5nLiBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RvcCddXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBSZXN1bHRzIGluIEpTT04gZm9ybVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEdlb2NvZGluZ1Jlc3VsdHMoXCJyZXN1bHRcIik7XG4gKiAvLz0gZS5nLiB7dGV4dDpcInJlc3VsdFwifVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICBzZWFyY2hTdHJpbmcsXG4gIHNlYXJjaFBhcmFtcyxcbiAgbGFuZyxcbiAgZm9jdXNQb2ludCxcbiAgc291cmNlcyxcbiAgcGVsaWFzVXJsLFxuICBtaW5pbWFsUmVnZXhwLFxuICBnZW9jb2RpbmdMYXllcnMsXG4pIHtcbiAgY29uc3QgdGV4dCA9IHNlYXJjaFN0cmluZyA/IHNlYXJjaFN0cmluZy50cmltKCkgOiBudWxsO1xuICBpZiAoXG4gICAgdGV4dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgIHRleHQubGVuZ3RoIDwgMSB8fFxuICAgIChtaW5pbWFsUmVnZXhwICYmICFtaW5pbWFsUmVnZXhwLnRlc3QodGV4dCkpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGNvbnN0IFBFTElBU19VUkwgPSBwZWxpYXNVcmwgfHwgREVGQVVMVF9QRUxJQVNfVVJMO1xuICBsZXQgb3B0cyA9IHsgdGV4dCwgLi4uc2VhcmNoUGFyYW1zLCAuLi5mb2N1c1BvaW50LCBsYW5nIH07XG4gIGlmIChzb3VyY2VzKSB7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgc291cmNlcyB9O1xuICB9XG4gIGlmIChnZW9jb2RpbmdMYXllcnMpIHtcbiAgICBjb25zdCBsYXllcnMgPSBnZW9jb2RpbmdMYXllcnMudG9TdHJpbmcoKTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBsYXllcnMgfTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvbihQRUxJQVNfVVJMLCBvcHRzKS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcztcbiAgfSk7XG59XG4iLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoL2RlYm91bmNlJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCB0YWtlIGZyb20gJ2xvZGFzaC90YWtlJztcbmltcG9ydCB7XG4gIHNvcnRTZWFyY2hSZXN1bHRzLFxuICBpc1N0b3AsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dCc7XG5pbXBvcnQgZ2V0R2VvY29kaW5nUmVzdWx0cyBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzJztcbmltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmZ1bmN0aW9uIGdldFN0b3BzRnJvbUdlb2NvZGluZyhzdG9wcywgVVJMX1BFTElBU19QTEFDRSkge1xuICBpZiAoIXN0b3BzIHx8IHN0b3BzLmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBsZXQgZ2lkcyA9ICcnO1xuICBjb25zdCBzdG9wc1dpdGhHaWRzID0gc3RvcHMubWFwKHN0b3AgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBzdG9wLnR5cGUgPT09ICdzdG9wJyA/ICdzdG9wJyA6ICdzdGF0aW9uJztcbiAgICBsZXQgZ2lkID0gYGd0ZnMke3N0b3AuZ3Rmc0lkLnNwbGl0KCc6JylbMF0udG9Mb3dlckNhc2UoKX06JHt0eXBlfTpHVEZTOiR7XG4gICAgICBzdG9wLmd0ZnNJZFxuICAgIH1gO1xuICAgIGlmIChzdG9wLmNvZGUpIHtcbiAgICAgIGdpZCArPSBgIyR7c3RvcC5jb2RlfWA7XG4gICAgfVxuICAgIGdpZHMgKz0gYCR7Z2lkfSxgO1xuICAgIHJldHVybiB7IC4uLnN0b3AsIGdpZCB9O1xuICB9KTtcbiAgY29uc3Qgc3RvcFN0YXRpb25NYXAgPSBzdG9wc1dpdGhHaWRzLnJlZHVjZShmdW5jdGlvbiByZWR1KFxuICAgIG1hcCxcbiAgICBzdG9wT3JTdGF0aW9uLFxuICApIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBtYXBbc3RvcE9yU3RhdGlvbi5naWRdID0gc3RvcE9yU3RhdGlvbjtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG4gIHJldHVybiBnZXRKc29uKFVSTF9QRUxJQVNfUExBQ0UsIHtcbiAgICBpZHM6IGdpZHMuc2xpY2UoMCwgLTEpLFxuICAgIC8vIGxhbmc6IGNvbnRleHQuZ2V0U3RvcmUoJ1ByZWZlcmVuY2VzU3RvcmUnKS5nZXRMYW5ndWFnZSgpLCBUT0RPIGVuYWJsZSB0aGlzIHdoZW4gT1RQIHN1cHBvcnRzIHRyYW5zbGF0aW9uc1xuICB9KS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcy5tYXAoc3RvcCA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSB7XG4gICAgICAgIHR5cGU6ICdGYXZvdXJpdGVTdG9wJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFkZGVuZHVtOiBzdG9wLnByb3BlcnRpZXMuYWRkZW5kdW0sXG4gICAgICAgICAgZ2lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5naWQsXG4gICAgICAgICAgY29kZTogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uY29kZSxcbiAgICAgICAgICBndGZzSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmd0ZnNJZCxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0ubGFzdFVwZGF0ZWQsXG4gICAgICAgICAgZmF2b3VyaXRlSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmZhdm91cml0ZUlkLFxuICAgICAgICAgIGFkZHJlc3M6IHN0b3AucHJvcGVydGllcy5sYWJlbCxcbiAgICAgICAgICBsYXllcjogaXNTdG9wKHN0b3AucHJvcGVydGllcykgPyAnZmF2b3VyaXRlU3RvcCcgOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiBzdG9wLmdlb21ldHJ5LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmYXZvdXJpdGU7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZXMsIGlucHV0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGZhdm91cml0ZXMsIGlucHV0LCBbJ2FkZHJlc3MnLCAnbmFtZSddKS5tYXAoaXRlbSA9PiAoe1xuICAgICAgdHlwZTogJ0Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgbGF5ZXI6ICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFtpdGVtLmxvbiwgaXRlbS5sYXRdIH0sXG4gICAgfSkpLFxuICApO1xufVxuZnVuY3Rpb24gc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1tYXAnLFxuICAgICAgICAgIGxheWVyOiAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0N1cnJlbnRMb2NhdGlvbicsXG4gICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICd1c2Utb3duLXBvc2l0aW9uJyxcbiAgICAgICAgICBsYXllcjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbcG9zaXRpb24ubG9uLCBwb3NpdGlvbi5sYXRdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsXG4gICAgICAgICAgbGF5ZXI6ICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdzZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFja1N1Z2dlc3Rpb24oKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYWNrJyxcbiAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgIGxhdDogbnVsbCxcbiAgICAgIGxvbjogbnVsbCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbGFiZWxJZDogJ2JhY2snLFxuICAgICAgICBsYXllcjogJ2JhY2snLFxuICAgICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0LCB1c2VTdG9wcywgdXNlU3RhdGlvbnMpIHtcbiAgcmV0dXJuIHN0b3BzQW5kU3RhdGlvbnMudGhlbihzdG9wc1N0YXRpb25zID0+IHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gc3RvcHNTdGF0aW9ucy5maWx0ZXIocyA9PlxuICAgICAgcy50eXBlID09PSAnc3RvcCcgPyB1c2VTdG9wcyA6IHVzZVN0YXRpb25zLFxuICAgICk7XG4gICAgcmV0dXJuIGZpbHRlck1hdGNoaW5nVG9JbnB1dChjYW5kaWRhdGVzLCBpbnB1dCwgW1xuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgIF0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyT2xkU2VhcmNoZXMob2xkU2VhcmNoZXMsIGlucHV0LCBkcm9wTGF5ZXJzKSB7XG4gIGxldCBtYXRjaGluZ09sZFNlYXJjaGVzID0gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KG9sZFNlYXJjaGVzLCBpbnB1dCwgW1xuICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICdwcm9wZXJ0aWVzLmxhYmVsJyxcbiAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICAncHJvcGVydGllcy5zaG9ydE5hbWUnLFxuICAgICdwcm9wZXJ0aWVzLmxvbmdOYW1lJyxcbiAgXSk7XG4gIGlmIChkcm9wTGF5ZXJzKSB7XG4gICAgLy8gZG9uJ3Qgd2FudCB0aGVzZVxuICAgIG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBtYXRjaGluZ09sZFNlYXJjaGVzLmZpbHRlcihcbiAgICAgIGl0ZW0gPT4gIWRyb3BMYXllcnMuaW5jbHVkZXMoaXRlbS5wcm9wZXJ0aWVzLmxheWVyKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgdGFrZShtYXRjaGluZ09sZFNlYXJjaGVzLCAxMCkubWFwKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgbmV3SXRlbSA9IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogJ09sZFNlYXJjaCcsXG4gICAgICAgIHRpbWV0YWJsZUNsaWNrZWQ6IGZhbHNlLCAvLyByZXNldCBsYXRlc3Qgc2VsZWN0aW9uIGFjdGlvblxuICAgICAgICBhcnJvd0NsaWNrZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGRlbGV0ZSBuZXdJdGVtLnByb3BlcnRpZXMuY29uZmlkZW5jZTtcbiAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgIH0pLFxuICApO1xufVxuXG5mdW5jdGlvbiBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpIHtcbiAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVMb2NhdGlvbnMoXG4gICAgc2VhcmNoQ29udGV4dC5jb250ZXh0LFxuICApO1xuICBpZiAoZmF2b3VyaXRlTG9jYXRpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMgPVxuICAgIHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zKHNlYXJjaENvbnRleHQuY29udGV4dCk7XG4gIGlmIChmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlU3RvcHMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgcmV0dXJuIGZhdm91cml0ZVN0b3BzPy5sZW5ndGggPiAwO1xufVxuXG5jb25zdCByb3V0ZUxheWVycyA9IFtcbiAgJ3JvdXRlLVRSQU0nLFxuICAncm91dGUtQlVTJyxcbiAgJ3JvdXRlLVJBSUwnLFxuICAncm91dGUtRkVSUlknLFxuICAncm91dGUtU1VCV0FZJyxcbiAgJ3JvdXRlLUFJUlBMQU5FJyxcbiAgJ3JvdXRlLUZVTklDVUxBUicsXG5dO1xuY29uc3QgbG9jYXRpb25MYXllcnMgPSBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG5jb25zdCBwYXJraW5nTGF5ZXJzID0gWydjYXJwYXJrJywgJ2Jpa2VwYXJrJ107XG5jb25zdCBzdG9wTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nXTtcblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgc2VhcmNoXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdWx0cyhcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgeyBpbnB1dCB9LFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBnZXRQb3NpdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zLFxuICAgIGdldE9sZFNlYXJjaGVzLFxuICAgIGdldEZhdm91cml0ZVN0b3BzLFxuICAgIHBhcmtpbmdBcmVhU291cmNlcyxcbiAgICBnZXRMYW5ndWFnZSxcbiAgICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzLFxuICAgIGdldFJvdXRlc1F1ZXJ5LFxuICAgIGNvbnRleHQsXG4gICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBsb2NhdGlvbkF3YXJlLFxuICAgIG1pbmltYWxSZWdleHAsXG4gICAgbGluZVJlZ2V4cCxcbiAgICBVUkxfUEVMSUFTLFxuICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgZmVlZElEcyxcbiAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXMsXG4gICAgZ2VvY29kaW5nU291cmNlcyxcbiAgICBnZXRGdXR1cmVSb3V0ZXMsXG4gICAgY2l0eUJpa2VOZXR3b3JrcyxcbiAgfSA9IHNlYXJjaENvbnRleHQ7XG4gIC8vIGlmIG5vIHRhcmdldHMgYXJlIHByb3ZpZGVkLCBzZWFyY2ggdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFRhcmdldHMgPSAhdGFyZ2V0cyB8fCB0YXJnZXRzLmxlbmd0aCA9PT0gMDtcbiAgLy8gaWYgbm8gc291cmNlcyBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGFsbC5cbiAgY29uc3QgYWxsU291cmNlcyA9ICFzb3VyY2VzIHx8IHNvdXJjZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9ucyhjb250ZXh0KTtcbiAgY29uc3Qgc2VhcmNoQ29tcG9uZW50cyA9IFtdO1xuICBjb25zdCBzZWFyY2hlcyA9IHsgdHlwZTogJ2FsbCcsIHRlcm06IGlucHV0LCByZXN1bHRzOiBbXSB9O1xuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGNvbnRleHQpO1xuICBjb25zdCBmb2N1c1BvaW50ID1cbiAgICBsb2NhdGlvbkF3YXJlICYmIHJlZlBvaW50Py5sYXQgJiYgcmVmUG9pbnQ/LmxvblxuICAgICAgPyB7XG4gICAgICAgICAgLy8gUm91bmQgY29vcmRpbmF0ZXMgdG8gYXBwcm94IDEga20sIGluIG9yZGVyIHRvIGltcHJvdmUgY2FjaGluZ1xuICAgICAgICAgICdmb2N1cy5wb2ludC5sYXQnOiByZWZQb2ludC5sYXQudG9GaXhlZCgzKSxcbiAgICAgICAgICAnZm9jdXMucG9pbnQubG9uJzogcmVmUG9pbnQubG9uLnRvRml4ZWQoMyksXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIGNvbnN0IG1vZGUgPSB0cmFuc3BvcnRNb2RlID8gdHJhbnNwb3J0TW9kZS5zcGxpdCgnLScpWzFdIDogdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnQ3VycmVudFBvc2l0aW9uJykgJiZcbiAgICBwb3NpdGlvbi5zdGF0dXMgIT09ICdnZW9sb2NhdGlvbi1ub3Qtc3VwcG9ydGVkJ1xuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdNYXBQb3NpdGlvbicpKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSk7XG4gIH1cbiAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ0Z1dHVyZVJvdXRlcycpKSB7XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHRha2UoaXRlbXMsIDMpKTtcbiAgfVxuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpICYmXG4gICAgaGFzRmF2b3VyaXRlcyhzZWFyY2hDb250ZXh0KVxuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gZ2V0RmF2b3VyaXRlTG9jYXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlTG9jYXRpb25zLCBpbnB1dCksXG4gICAgICApO1xuICAgICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0JhY2snKSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0QmFja1N1Z2dlc3Rpb24oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG4gICAgICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKSkge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpOyAvLyBzZWFyY2ggc3RhdGlvbnMgZnJvbSBPU01cbiAgICAgIH1cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBnZW9jb2RpbmdTb3VyY2VzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbkhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0LCAnZW5kcG9pbnQnKTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhsb2NhdGlvbkhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1BhcmtpbmdBcmVhcycpKSB7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgICBpZiAoZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuc2l6ZSA9IGdlb2NvZGluZ1NpemU7XG4gICAgICB9XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbiAgICAgIGNvbnN0IGZlZWRJZHMgPSBwYXJraW5nQXJlYVNvdXJjZXMgPyBwYXJraW5nQXJlYVNvdXJjZXMuam9pbignLCcpIDogbnVsbDtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkSWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGZpbHRlck9sZFNlYXJjaGVzKGhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXNlU3RvcHMgPSB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpO1xuICBjb25zdCB1c2VTdGF0aW9ucyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJyk7XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdXNlU3RvcHMgfHwgdXNlU3RhdGlvbnMpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gZ2V0RmF2b3VyaXRlU3RvcHMoY29udGV4dCk7XG4gICAgICBsZXQgc3RvcHNBbmRTdGF0aW9ucztcbiAgICAgIGlmIChmYXZvdXJpdGVTdG9wcy5ldmVyeShzdG9wID0+IHN0b3AudHlwZSA9PT0gJ3N0YXRpb24nKSkge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKFxuICAgICAgICAgIGZhdm91cml0ZVN0b3BzLFxuICAgICAgICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeShmYXZvdXJpdGVTdG9wcylcbiAgICAgICAgICAudGhlbihmYXZvdXJpdGVzID0+XG4gICAgICAgICAgICBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoZmF2b3VyaXRlcywgVVJMX1BFTElBU19QTEFDRSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucyksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFtdO1xuICAgICAgaWYgKHVzZVN0b3BzKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAodXNlU3RhdGlvbnMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgaWYgKGdlb2NvZGluZ1NlYXJjaFBhcmFtcyAmJiBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXSkge1xuICAgICAgICBzZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXSA9XG4gICAgICAgICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J107XG4gICAgICB9XG4gICAgICAvLyBhIGxpdHRsZSBoYWNrOiB3aGVuIHNlYXJjaGluZyBsb2NhdGlvbiBkYXRhLCBhdXRvbWF0aWNhbGx5IGRlZHVwZSBzdG9wc1xuICAgICAgLy8gdGhpcyBjb3VsZCBiZSBhIG5ldyBleHBsaWNpdCBwcm9wXG4gICAgICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuZGVkdXBlc3RvcHMgPSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgZmVlZHMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHN0b3BIaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmdpZCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnByb3BlcnRpZXMuZ2lkLmluY2x1ZGVzKCdHVEZTOicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBpZiAoIXVzZVN0b3BzKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RvcCcpO1xuICAgICAgfVxuICAgICAgaWYgKCF1c2VTdGF0aW9ucykge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUpIDogcmVzdWx0LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUm91dGVzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVJvdXRlcyA9IGdldEZhdm91cml0ZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkoZmF2b3VyaXRlUm91dGVzLCBpbnB1dCwgbW9kZSwgcGF0aE9wdHMpLnRoZW4oXG4gICAgICAgICAgcmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgIGdldFJvdXRlc1F1ZXJ5KGlucHV0LCBmZWVkSURzLCB0cmFuc3BvcnRNb2RlLCBwYXRoT3B0cykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCByb3V0ZUhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMuZmlsdGVyKGkgPT4gIShpID09PSB0cmFuc3BvcnRNb2RlKSkpO1xuICAgICAgfVxuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcblxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhyb3V0ZUhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdHMgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHRzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uID1cbiAgICAgICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeShcbiAgICAgICAgICBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbixcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgY2l0eUJpa2VOZXR3b3Jrcy5qb2luKCcsJyksXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsuLi5zdG9wTGF5ZXJzXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvbWlzZSA9IFByb21pc2UuYWxsKHNlYXJjaENvbXBvbmVudHMpXG4gICAgLnRoZW4oZmxhdHRlbilcbiAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHNlYXJjaGVzLnJlc3VsdHMgPSByZXN1bHRzO1xuICAgIH0pXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBzZWFyY2hlcy5lcnJvciA9IGVycjtcbiAgICB9KTtcbiAgc2VhcmNoUmVzdWx0c1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgY2FsbGJhY2soe1xuICAgICAgLi4uc2VhcmNoZXMsXG4gICAgICByZXN1bHRzOiBzb3J0U2VhcmNoUmVzdWx0cyhsaW5lUmVnZXhwLCBzZWFyY2hlcy5yZXN1bHRzLCBpbnB1dCksXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBkZWJvdW5jZWRTZWFyY2ggPSBkZWJvdW5jZShnZXRTZWFyY2hSZXN1bHRzLCAzMDAsIHtcbiAgbGVhZGluZzogdHJ1ZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZVNlYXJjaCA9IChcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgZGF0YSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikgPT4ge1xuICBjYWxsYmFjayhudWxsKTsgLy8gVGhpcyBtZWFucyAnd2UgYXJlIHNlYXJjaGluZydcbiAgZGVib3VuY2VkU2VhcmNoKFxuICAgIHRhcmdldHMsXG4gICAgc291cmNlcyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGRhdGEsXG4gICAgY2FsbGJhY2ssXG4gICAgcGF0aE9wdHMsXG4gICAgcmVmUG9pbnQsXG4gICk7XG59O1xuIiwiaW1wb3J0IHsgY3JlYXRlSW5zdGFuY2UgfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi90cmFuc2xhdGlvbnMnO1xuXG5jb25zdCBpMThuID0gY3JlYXRlSW5zdGFuY2Uoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgLy8gZGVidWc6IHRydWUsXG4gIHJlc291cmNlczogdHJhbnNsYXRpb25zLFxuICBkZWZhdWx0TlM6ICd0cmFuc2xhdGlvbicsXG4gIHJlYWN0OiB7XG4gICAgdXNlU3VzcGVuc2U6IHRydWUsXG4gIH0sXG59KTtcblxuaTE4bi5pbml0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG47XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZHJlc3NlJyxcbiAgICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgT3J0IG9yIEdlc2Now6RmdCcsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgYWlycGxhbmU6ICdGbHVnJyxcbiAgICAgIGFycml2YWw6ICdBbmt1bmZ0JyxcbiAgICAgIGJhY2s6ICdadXLDvGNrJyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnTGVpaHJhZC1TdGF0aW9uJyxcbiAgICAgIGJ1czogJ0J1cycsXG4gICAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdMw7ZzY2hlbicsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnU3VjaGhpc3RvcmllIGzDtnNjaGVuJyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ0FrdHVlbGxlIFBvc2l0aW9uJyxcbiAgICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdXb2xsZW4gU2llIGRpZSBTdWNoLUhpc3RvcmllIGzDtnNjaGVuPycsXG4gICAgICBkZXBhcnR1cmU6ICdBYmZhaHJ0JyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnWmllbCcsXG4gICAgICAnZ2l2ZS1vcmlnaW4nOiAnU3RhcnQgZWluZ2ViZW4uJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1ppZWwgZWluZ2ViZW4uJyxcbiAgICAgIGZhdm91cml0ZTogJ0Zhdm9yaXRlbicsXG4gICAgICBmZXJyeTogJ0bDpGhyZScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ1p1a8O8bmZ0aWdlIFZlcmJpbmR1bmcnLFxuICAgICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICAgIG93bmxvY2F0aW9uczogJ0VpZ2VuZSBGYXZvcml0ZW4nLFxuICAgICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgIHJhaWw6ICdadWcnLFxuICAgICAgc2VhcmNoOiAnU3VjaGUnLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N1Y2hlIGFuaGFuZCB2b24gQWRyZXNzZSBvZGVyIE9ydHNhbmdhYmUnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3VjaGUnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTdWNoZSBaaWVsb3J0LCBMaW5pZSBvciBIYWx0ZXN0ZWxsZScsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1ppZWxvcnQgZWluZ2ViZW4nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnRXJnZWJuaXNzZSBpbiDigJxaaWVsb3J04oCdLVJlaXRlciBhbnplaWdlbicsXG4gICAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnS2VpbiBPcnQgZ2VmdW5kZW4uJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1N1Y2hlIFN0YXJ0b3J0LCBMaW5pZSBvZGVyIEhhbHRlc3RlbGxlJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N0YXJ0b3J0IGVpbmdlYmVuJyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU3RhbmRvcnQgZXJtaXR0ZWxuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdBZnRlciBzZWxlY3RpbmcgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIHlvdSBhcmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgZGVzdGluYXRpb24gZmllbGQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdTdHJhw59lJyxcbiAgICAgIHN1YndheTogJ1UtQmFobicsXG4gICAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgICBzdG9wOiAnSGFsdGVzdGVsbGUnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU3VjaGUgSGFsdGVzdGVsbGVuIHVuZCBMaW5pZW4gaW4gZGVyIE7DpGhlJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTdWNoZSBCdXNsaW5pZW4gb3IgSGFsdGVzdGVsbGVuJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N1Y2hlIExlaWhyYWQtU3RhdGlvbmVuJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3VjaGUgWnVndmVyYmluZHVuZ2VuIG9kZXIgQmFobmjDtmZlJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTdWNoZSBVLUJhaG4tTGluaWVuIG9kZXIgSGFsdGVzdGVsbGVuJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3VjaGUgU3RhZHRiYWhuLUhhbHRlc3RlbGxlbi1TdWNoZScsXG4gICAgICAndG9kYXktYXQnOiAnSGV1dGUgdW0nLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ01vcmdlbiB1bScsXG4gICAgICB0cmFtOiAnU3RyYcOfZW5iYWhuJyxcbiAgICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0JlbnV0emUgYWt0dWVsbGVuIFN0YW5kb3J0JyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV8OkaGxlIFBvc2l0aW9uIGFuaGFuZCBLYXJ0ZScsXG4gICAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdBdXMgZWlnZW5lbiBGYXZvcml0ZW4gYXVzd8OkaGxlbicsXG4gICAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICAgIHdoZXJlOiAnV29oaW4/JyxcbiAgICAgIHBsYWNlOiAnT3J0JyxcbiAgICB9LFxuICB9LFxuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRkcmVzcycsXG4gICAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnRmxpZ2h0JyxcbiAgICAgIGFycml2YWw6ICdBcnJpdmFsJyxcbiAgICAgIGJhY2s6ICdCYWNrJyxcbiAgICAgIGJpa2VwYXJrOiAnUGFyayAmIFJpZGUgZm9yIGJpa2VzJyxcbiAgICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnQmlrZSBzdGF0aW9uJyxcbiAgICAgIGJ1czogJ2J1cycsXG4gICAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgICAgY2FycGFyazogJ1BhcmsgJiBSaWRlJyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnQ2xlYXInLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ0NsZWFyIHNlYXJjaCBoaXN0b3J5JyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBjbGVhciB0aGUgc2VhcmNoIGhpc3Rvcnk/JyxcbiAgICAgIGRlcGFydHVyZTogJ0RlcGFydHVyZScsXG4gICAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdFbnRlciB5b3VyIG9yaWdpbi4nLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnRW50ZXIgeW91ciBkZXN0aW5hdGlvbicsXG4gICAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgICAgZmVycnk6ICdGZXJyeScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ0Z1dHVyZSByb3V0ZScsXG4gICAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgICAgb3dubG9jYXRpb25zOiAnT3duIGxvY2F0aW9ucycsXG4gICAgICBsb2FkaW5nOiAnTG9hZGluZy4uLicsXG4gICAgICAnbWludXRlLXNob3J0JzogJ20nLFxuICAgICAgcGxhdGZvcm06ICdQbGF0Zm9ybScsXG4gICAgICByYWlsOiAnVHJhaW4nLFxuICAgICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCBmaWVsZCcsXG4gICAgICBzZWFyY2g6ICdTZWFyY2gnLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU2VhcmNoJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU2VhcmNoIGRlc3RpbmF0aW9uLCByb3V0ZSBvciBzdG9wJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnRW50ZXIgZGVzdGluYXRpb24nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnVmlldyByZXN1bHRzIGluIHRoZSBhZGphY2VudCDigJxEZXN0aW5hdGlvbuKAnSB0YWInLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ05vIGxvY2F0aW9uJyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1NlYXJjaCBvcmlnaW4sIHJvdXRlIG9yIHN0b3AnLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnRW50ZXIgb3JpZ2luJyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnRGV0ZWN0IGxvY2F0aW9uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAgICdBZnRlciBzZWxlY3RpbmcgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIHlvdSBhcmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgZGVzdGluYXRpb24gZmllbGQuJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQ3VycmVudCBzZWxlY3Rpb246IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICAgIHN0b3A6ICdTdG9wJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1NlYXJjaCBzdG9wcyBhbmQgcm91dGVzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1NlYXJjaCBmbGlnaHRzIG9yIGFpcnBvcnRzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJpa2VwYXJrJzogJ1NlYXJjaCBiaWtlIHBhcmtzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTZWFyY2ggYnVzIHJvdXRlcyBvciBzdG9wcycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jYXJwYXJrJzogJ1NlYXJjaCBjYXIgcGFya3MnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU2VhcmNoIGNpdHkgYmlrZSBzdGF0aW9ucycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1NlYXJjaCB0cmFpbiByb3V0ZXMgb3Igc3RhdGlvbnMnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1NlYXJjaCBtZXRybyByb3V0ZXMgb3Igc3RhdGlvbnMgJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU2VhcmNoIHRyYW0gcm91dGVzIG9yIHN0b3BzJyxcbiAgICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzIGFuZCBzdG9wIHNlYXJjaCcsXG4gICAgICAndG9kYXktYXQnOiAndG9kYXkgYXQnLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ3RvbW9ycm93IGF0JyxcbiAgICAgIHRyYW06ICdUcmFtJyxcbiAgICAgIHRyYWNrOiAnVHJhY2snLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdTZWxlY3QgcG9zaXRpb24gZnJvbSBtYXAnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnU2VsZWN0IGZyb20gb3duIGxvY2F0aW9ucycsXG4gICAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICAgIHdoZXJlOiAnV2hlcmUgdG8/JyxcbiAgICAgIHBsYWNlOiAnTG9jYXRpb24nLFxuICAgIH0sXG4gIH0sXG4gIGZpOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdPc29pdGUnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnT3NvaXRlLCBwYWlra2EgdGFpIHlyaXR5cycsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgIGFpcnBsYW5lOiAnTGVudG9rb25lJyxcbiAgICAgIGFycml2YWw6ICdQZXJpbGzDpCcsXG4gICAgICBiYWNrOiAnVGFrYWlzaW4nLFxuICAgICAgdmVoaWNsZXJlbnRhbHN0YXRpb246ICdQecO2csOkYXNlbWEnLFxuICAgICAgYmlrZXBhcms6ICdMaWl0eW50w6RweXPDpGvDtmludGknLFxuICAgICAgYnVzOiAnYnVzc2knLFxuICAgICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgICBjYXJwYXJrOiAnTGlpdHludMOkcHlzw6Rrw7ZpbnRpJyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVHloamVubsOkJyxcbiAgICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUeWhqZW5uw6QgaGFrdWhpc3RvcmlhJyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ1TDpG3DpG5oZXRraW5lbiBzaWphaW50aScsXG4gICAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0hhbHVhdGtvIHR5aGplbnTDpMOkIGhha3VoaXN0b3JpYW4/JyxcbiAgICAgIGRlcGFydHVyZTogJ0zDpGh0w7ZhaWthJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgICAgZmF2b3VyaXRlOiAnU3Vvc2lra2knLFxuICAgICAgZmVycnk6ICdMYXV0dGEnLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdUdWxldmEgcmVpdHRpJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdMw6RodMO2cGFpa2thJyxcbiAgICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICAgIG9yaWdpbjogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICAgb3dubG9jYXRpb25zOiAnT21hdCBwYWlrYXQnLFxuICAgICAgbG9hZGluZzogJ0xhZGF0YWFuLi4uJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgIHBsYXRmb3JtOiAnTGFpdHVyaScsXG4gICAgICByYWlsOiAnSnVuYScsXG4gICAgICByZXF1aXJlZDogJ3Bha29sbGluZW4ga2VudHTDpCcsXG4gICAgICBzZWFyY2g6ICdFdHNpJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdIYWUgb3NvaXR0ZWVsbGEgdGFpIHBhaWthbiBuaW1lbGzDpCcsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdIYWUnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdIYWUgbcOkw6Ryw6RucMOkw6R0w6QsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1N5w7Z0w6QgbcOkw6Ryw6RucMOkw6QnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnS2F0c28gdHVsb2tzZXQgdmllcmVpc2VsdMOkIE3DpMOkcsOkbnDDpMOkLXbDpGxpbGVoZGVsdMOkJyxcbiAgICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdFaSB0dWxva3NpYScsXG4gICAgICAnc2VhcmNoLW9yaWdpbic6ICdIYWUgbMOkaHTDtnBhaWtrYWEsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTecO2dMOkIGzDpGh0w7ZwYWlra2EnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdQYWlra2EsIGxpbmphIGphIHB5c8Oka2tpaGFrdS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAgICdOYXZpZ29pIGxpc3Rhc3NhIG51b2xpbsOkcHDDpGltaWxsw6QgamEgdmFsaXRzZSBlbnRlcmlsbMOkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgICAnU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnVmFsaXR0dWFzaSBsw6RodMO2cGFpa2FuIHNpaXJyeXTDpMOkbiBzdW9yYWFuIG3DpMOkcsOkbnDDpMOkLWtlbnR0w6TDpG4uJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1cycsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzdGEnLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnVMOkbcOkbmhldGtpbmVuIHZhbGludGE6IHt7c2VsZWN0aW9ufX0nLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdQYWlrYW5uYScsXG4gICAgICBzdHJlZXQ6ICdLYXR1JyxcbiAgICAgIHN1YndheTogJ01ldHJvJyxcbiAgICAgIHN0YXRpb246ICdBc2VtYScsXG4gICAgICBzdG9wOiAnUHlzw6Rra2knLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnTGluamEsIHB5c8Oka2tpIHRhaSBhc2VtYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdIYWUgbGVudG9qYSB0YWkgbGVudG9hc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtYmlrZXBhcmsnOiAnSGFlIHB5w7Zyw6RwYXJra2lhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdIYWUgYnVzc2lsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2FycGFyayc6ICdIYWUgYXV0b3BhcmtraWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnSGFlIGthdXB1bmtpcHnDtnLDpGFzZW1hYScsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ0hhZSBsw6RoaWp1bmFhIHRhaSBhc2VtYWEnLFxuICAgICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ0hhZSBtZXRyb2xpbmphYSB0YWkgYXNlbWFhJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnSGFlIHJhaXRpb2xpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0xpbmphLSBqYSBweXPDpGtraWhha3UnLFxuICAgICAgJ3RvZGF5LWF0JzogJ3TDpG7DpMOkbiBrbG8nLFxuICAgICAgJ3RvbW9ycm93LWF0JzogJ2h1b21lbm5hIGtsbycsXG4gICAgICB0cmFtOiAnUmFpdGlvdmF1bnUnLFxuICAgICAgdHJhY2s6ICdSYWlkZScsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWYWxpdHNlIHNpamFpbnRpIGthcnRhbHRhJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1ZhbGl0c2Ugb21pc3RhIHBhaWtvaXN0YScsXG4gICAgICB2ZW51ZTogJ1BhaWtrYScsXG4gICAgICAndmlhLXBvaW50JzogJ1bDpGxpcGlzdGUnLFxuICAgICAgd2hlcmU6ICdNaW5uZSBtZW5uw6TDpG4/JyxcbiAgICAgIHBsYWNlOiAnUGFpa2thJyxcbiAgICB9LFxuICB9LFxuICBwbDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBhZGRyZXNzOiAnQWRyZXMnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXMsIG1pZWpzY2UgbHViIGZpcm1hJyxcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1d5YmllcnogY3phcyBwb3N0b2p1IGRsYSBwdW5rdHUge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdaYW1rbmlqIHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgICBhaXJwbGFuZTogJ0xvdCcsXG4gICAgICBhcnJpdmFsOiAnUHJ6eWphemQnLFxuICAgICAgYmFjazogJ1dyw7PEhycsXG4gICAgICBiaWtlcGFyazogJ1Bhcmt1aiBpIEplZMW6IGRsYSByb3dlcsOzdycsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1N0YWNqYSByb3dlcm93YScsXG4gICAgICBidXM6ICdhdXRvYnVzJyxcbiAgICAgIGNhbmNlbDogJ0FudWx1aicsXG4gICAgICBjYXJwYXJrOiAnUGFya3VqIGkgSmVkxbonLFxuICAgICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdXeWN6ecWbxIcnLFxuICAgICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1d5Y3p5xZvEhyBoaXN0b3JpxJkgd3lzenVraXdhbmlhJyxcbiAgICAgIGN1cnJlbnRwb3NpdGlvbjogJ09iZWNuZSBwb8WCb8W8ZW5pZScsXG4gICAgICBkZWxldGU6ICdVc3XFhCcsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOlxuICAgICAgICAnQ3p5IG5hIHBld25vIGNoY2VzeiB3eWN6ecWbY2nEhyBoaXN0b3JpxJkgd3lzenVraXdhbmlhPycsXG4gICAgICBkZXBhcnR1cmU6ICdPZGphemQnLFxuICAgICAgZGVzdGluYXRpb246ICdDZWwnLFxuICAgICAgJ2dpdmUtb3JpZ2luJzogJ1dwcm93YWTFuiBzd8OzaiBwdW5rdCBwb2N6xIV0a293eS4nLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnV3Byb3dhZMW6IHN3w7NqIGNlbCcsXG4gICAgICBmYXZvdXJpdGU6ICdVbHViaW9uZScsXG4gICAgICBmZXJyeTogJ1Byb20nLFxuICAgICAgJ2Z1dHVyZS1yb3V0ZSc6ICdQcnp5c3rFgmEgdHJhc2EnLFxuICAgICAgb3JpZ2luOiAnUG9jesSFdGVrJyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdQb2N6xIV0ZWsnLFxuICAgICAgb3dubG9jYXRpb25zOiAnV8WCYXNuZSBtaWVqc2NhJyxcbiAgICAgIGxvYWRpbmc6ICfFgWFkb3dhbmll4oCmJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluLicsXG4gICAgICBwbGF0Zm9ybTogJ1Blcm9uJyxcbiAgICAgIHJhaWw6ICdQb2NpxIVnJyxcbiAgICAgIHJlcXVpcmVkOiAnd3ltYWdhbmUgcG9sZScsXG4gICAgICBzZWFyY2g6ICdTenVrYWonLFxuICAgICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N6dWthaiBwbyBhZHJlc2llIGx1YiBuYXp3aWUgbWllanNjYScsXG4gICAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTenVrYWonLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTenVrYWogY2VsdSwgdHJhc3kgbHViIHByenlzdGFua3UnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgZG9jZWxvd3knLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnV3nFm3dpZXRsIHd5bmlraSB3IHPEhXNpZWRuaWVqIGthcmNpZSDigJ5DZWzigJ0nLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0JyYWsgbG9rYWxpemFjamknLFxuICAgICAgJ3NlYXJjaC1vcmlnaW4nOiAnV3lzenVrYWogcG9jesSFdGVrLCBrb25pZWMgbHViIHB1bmt0IHBvxZtyZWRuaScsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgcG9jesSFdGtvd3knLFxuICAgICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdXeWtyeWogbG9rYWxpemFjasSZJyxcbiAgICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnTWllanNjZSwgbG9rYWxpemFjamEgaSBwcnp5c3RhbmVrLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hd2lndWogcG8gbGnFm2NpZSB1xbx5d2FqxIVjIHN0cnphxYJlayBpIHd5YmllcmFqIGtsYXdpc3plbSBFbnRlci4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ1dwcm93YWTFuiBsb2thbGl6YWNqxJkgaSBuYXdpZ3VqIHBvIGxpxZtjaWUgZ2VzdGFtaSBwcnplc3V3YW5pYS4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICAgJ1BvIHd5YnJhbml1IGxva2FsaXphY2ppIHBvY3rEhXRrb3dlaiwgYXV0b21hdHljem5pZSBwcnplamR6aWVzeiBkbyBwb2xhIG1pZWpzY2EgZG9jZWxvd2Vnby4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnRG9zdMSZcG5hIGplc3Qge3tjb3VudH19IHByb3BvenljamEnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fZmV3JzogJ0Rvc3TEmXBuZSBzxIUge3tjb3VudH19IHByb3BvenljamUnLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fb3RoZXInOiAnRG9zdMSZcG5lIGplc3Qge3tjb3VudH19IHByb3BvenljamknLFxuICAgICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnT2JlY255IHd5YsOzcjoge3tzZWxlY3Rpb259fScsXG4gICAgICBzdHJlZXQ6ICdVbGljYScsXG4gICAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgICBzdGF0aW9uOiAnU3RhY2phJyxcbiAgICAgIHN0b3A6ICdQcnp5c3RhbmVrJyxcbiAgICAgICdzdG9wLW5lYXIteW91JzogJ1N6dWthaiBwcnp5c3RhbmvDs3cgaSB0cmFzJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1N6dWthaiBsb3TDs3cgaSBsb3RuaXNrJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTenVrYWogdHJhcyBhdXRvYnVzb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3p1a2FqIHN0YWNqaSByb3dlcsOzdyBtaWVqc2tpY2gnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTenVrYWogdHJhcyBrb2xlam93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTenVrYWogdHJhcyBtZXRyYSBpIHByenlzdGFua8OzdyAnLFxuICAgICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTenVrYWogdHJhcyB0cmFtd2Fqb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdXeXN6dWtpd2FuaWUgYXV0b2J1c8OzdyBpIHByenlzdGFua8OzdycsXG4gICAgICAndG9kYXktYXQnOiAnZHppxZsgbycsXG4gICAgICAndG9tb3Jyb3ctYXQnOiAnanV0cm8gbycsXG4gICAgICB0cmFtOiAnVHJhbXdhaicsXG4gICAgICB0cmFjazogJ1RvcicsXG4gICAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVxbx5aiBvYmVjbmVqIGxva2FsaXphY2ppJyxcbiAgICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV3liaWVyeiBtaWVqc2NlIG5hIG1hcGllJyxcbiAgICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1d5YmllcnogeiB3xYJhc255Y2ggbWllanNjJyxcbiAgICAgIHZlbnVlOiAnTWllanNjZScsXG4gICAgICAndmlhLXBvaW50JzogJ1ByemV6IHB1bmt0JyxcbiAgICAgIHdoZXJlOiAnRG9rxIVkPycsXG4gICAgICBwbGFjZTogJ01pZWpzY2UnLFxuICAgIH0sXG4gIH0sXG4gIHN2OiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGFkZHJlc3M6ICdBZHJlc3MnLFxuICAgICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBwbGF0cyBlbGxlciBmw7ZyZXRhZycsXG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgIGFpcnBsYW5lOiAnRmx5ZycsXG4gICAgICBhcnJpdmFsOiAnQW5sw6RuZGVyJyxcbiAgICAgIGJhY2s6ICdUaWxsYmFrYScsXG4gICAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1N0YWRzY3lrZWxzdGF0aW9uJyxcbiAgICAgIGJpa2VwYXJrOiAnQW5zbHV0bmluZ3NwYXJrZXJpbmcgZsO2ciBjeWtsYXInLFxuICAgICAgYnVzOiAnQnVzc2knLFxuICAgICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICAgIGNhcnBhcms6ICdJbmZhcnRzcGFya2VyaW5nJyxcbiAgICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVMO2bScsXG4gICAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVMO2bSBzw7ZraGlzdG9yaWtlbicsXG4gICAgICBjdXJyZW50cG9zaXRpb246ICdOdXZhcmFuZGUgcG9zaXRpb24nLFxuICAgICAgZGVsZXRlOiAnVGEgYm9ydCcsXG4gICAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnVmlsbCBkdSB0w7ZtbWEgc8O2a2hpc3RvcmlrZW4/JyxcbiAgICAgIGRlcGFydHVyZTogJ0F2Z8OlbmdzdGlkJyxcbiAgICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICAgZmF2b3VyaXRlOiAnRmF2b3JpdCcsXG4gICAgICBmZXJyeTogJ0bDpHJqYScsXG4gICAgICAnZnV0dXJlLXJvdXRlJzogJ0ZyYW10aWRhIHJ1dHQnLFxuICAgICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnU2tyaXYgaW4gZGluIGRlc3RpbmF0aW9uJyxcbiAgICAgICdnaXZlLW9yaWdpbic6ICdTa3JpdiBpbiBkaW4gYXZmw6RyZHNwbGF0cycsXG4gICAgICBvcmlnaW46ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAgIG93bmxvY2F0aW9uczogJ0VnbmEgcGxhdHNlcicsXG4gICAgICBsb2FkaW5nOiAnTGFkZGFyLi4uJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgIHBsYXRmb3JtOiAnUGxhdHRmb3JtJyxcbiAgICAgIHJhaWw6ICdUw6VnJyxcbiAgICAgIHJlcXVpcmVkOiAnb2JsaWdhdG9yaXNrdCBmw6RsdCcsXG4gICAgICBzZWFyY2g6ICdTw7ZrJyxcbiAgICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTw7ZrIG1lZCBhZHJlc3NlbiBlbGxlciBwbGF0c2VucyBuYW1uJyxcbiAgICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1PDtmsnLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTw7ZrIGRlc3RpbmF0aW9uLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU2tyaXYgZGVzdGluYXRpb24nLFxuICAgICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgICAnU2UgcmVzdWx0YXRlbiB1bmRlciBmbGlrZW4gRGVzdGluYXRpb24nLFxuICAgICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0luZ2Egc8O2a3Jlc3VsdGF0JyxcbiAgICAgICdzZWFyY2gtb3JpZ2luJzogJ1PDtmsgYXZmw6RyZHNwbGF0cywgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTa3JpdiBhdmbDpHJkc3BsYXRzJyxcbiAgICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU8O2ayBwb3NpdGlvbicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BsYXRzLCBsaW5qZSBvY2ggaMOlbGxwbGF0c3PDtmtuaW5nLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICAgJ05hdmlnZXJhIGxpc3RhbiBtZWQgcGlsdGFuZ2VudGVybmEgb2NoIHbDpGxqIG1lZCBFbnRlci10YW5nZXRlbi4nLFxuICAgICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICAgJ0FuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgICAnRWZ0ZXIgYXR0IGR1IHZhbHQgYXZnw6VuZ3NwbGF0c2VuIHRhcyBkdSBkaXJla3QgdGlsbCBEZXN0aW5hdGlvbi1mw6RsdGV0LicsXG4gICAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdOdXZhcmFuZGUgdmFsOiB7e3NlbGVjdGlvbn19JyxcbiAgICAgIHN0cmVldDogJ0dhdGEnLFxuICAgICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgICAgc3RvcDogJ0jDpWxscGxhdHMnLFxuICAgICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1PDtmsgZmx5ZyBlbGxlciBmbHlncGxhdHNlcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1iaWtlcGFyayc6ICdTw7ZrIGN5a2VscGFya2VyaW5nJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LWNhcnBhcmsnOiAnU8O2ayBhbnNsdXRuaW5nc3BhcmtlcmluZycsXG4gICAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTw7ZrIG7DpHJ0w6VnZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTw7ZrIG1ldHJvbGluamVyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1c3Mgb2NoIHN0b3BwIHPDtmtuaW5nZW4nLFxuICAgICAgJ3RvZGF5LWF0JzogJ2kgZGFnIGtsJyxcbiAgICAgICd0b21vcnJvdy1hdCc6ICdpIG1vcmdvbicsXG4gICAgICB0cmFtOiAnU3DDpXJ2YWduJyxcbiAgICAgIHRyYWNrOiAnU3DDpXInLFxuICAgICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWw6RsaiBwb3NpdGlvbiBmcsOlbiBrYXJ0YW4nLFxuICAgICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVsOkbGogZnLDpW4gZWduYSBwbGF0c2VyJyxcbiAgICAgIHZlbnVlOiAnTcO2dGVzcGxhdHMnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgICAgd2hlcmU6ICdWYXJ0IHZpbGwgZHUgw6VrYT8nLFxuICAgICAgcGxhY2U6ICdQbGF0cycsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxhZG1pbiAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGFkbWluXG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsYWRtaW4gPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsImltcG9ydCB7XG4gIGdldE5hbWVMYWJlbCxcbiAgZ2V0U3RvcENvZGUsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCB7IGdldFN0b3BOYW1lIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGdldExhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5cbmV4cG9ydCBjb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUE9JU2VhcmNoID0gaWQgPT5cbiAgaWQgPT09ICdvcmlnaW4nIHx8XG4gIGlkID09PSAnZGVzdGluYXRpb24nIHx8XG4gIGlkID09PSAndmlhLXBvaW50JyB8fFxuICBpZCA9PT0gJ29yaWdpbi1zdG9wLW5lYXIteW91JztcblxuZXhwb3J0IGNvbnN0IGdldFBsYXRmb3JtID0gKGFkZGVuZHVtLCBsbmcsIHQpID0+IHtcbiAgLy8gY2hlY2sgaWYgaTgxbiBpcyBpbml0aWFsaXplZFxuICBpZiAoIXQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghYWRkZW5kdW0gfHwgIWFkZGVuZHVtLkdURlMucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHsgbW9kZXMsIHBsYXRmb3JtIH0gPSBhZGRlbmR1bS5HVEZTO1xuICBjb25zdCB0eXBlID1cbiAgICBtb2RlcyAmJiBtb2Rlc1swXSA9PT0gJ1JBSUwnID8gdCgndHJhY2snLCB7IGxuZyB9KSA6IHQoJ3BsYXRmb3JtJywgeyBsbmcgfSk7XG4gIHJldHVybiBbdHlwZSwgcGxhdGZvcm1dO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0sIGxuZywgdCkge1xuICAvLyBjaGVjayBpZiBpODFuIGlzIGluaXRpYWxpemVkXG4gIGlmICghdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGl0ZW0udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJykge1xuICAgICAgcmV0dXJuIFsnJywgdCgnc2VsZWN0LWZyb20tbWFwJywgeyBsbmcgfSldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIFsnJywgdCgndXNlLW93bi1wb3NpdGlvbicsIHsgbG5nIH0pXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICByZXR1cm4gWycnLCB0KCdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJywgeyBsbmcgfSldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgbGV0IFtuYW1lLCBsYWJlbF0gPSBnZXROYW1lTGFiZWwoaXRlbS5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICBsZXQgc3VnZ2VzdGlvblR5cGU7XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VyZW50YWwnKSB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdCgndmVoaWNsZXJlbnRhbHN0YXRpb24nLCB7IGxuZyB9KTtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmxhYmVsSWQ7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHN0b3BDb2RlXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnYmlrZXBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQoJ2Jpa2VwYXJrJywgeyBsbmcgfSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2NhcnBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQoJ2NhcnBhcmsnLCB7IGxuZyB9KTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLm1vZGUpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gdChcbiAgICAgICAgaXRlbS5wcm9wZXJ0aWVzLm1vZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyksXG4gICAgICAgIHsgbG5nIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXllciA9IGl0ZW0ucHJvcGVydGllcy5sYXllclxuICAgICAgICAucmVwbGFjZSgncm91dGUtJywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyk7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IHQobGF5ZXIsIHsgbG5nIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5pZCAmJlxuICAgICAgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0b3AnIHx8IGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0YXRpb24nKVxuICAgICkge1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBnZXRTdG9wQ29kZShpdGVtLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgbW9kZSA9IGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bT8uR1RGUy5tb2RlcztcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtLCBsbmcsIHQpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgc3VnZ2VzdGlvblR5cGUsXG4gICAgICAgIGdldFN0b3BOYW1lKG5hbWUsIHN0b3BDb2RlKSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHN0b3BDb2RlLFxuICAgICAgICBtb2RlLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdGF0aW9uJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb2RlIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCBzdG9OYW1lID0gYWRkcmVzcyA/IGdldFN0b3BOYW1lKGFkZHJlc3Muc3BsaXQoJywnKVswXSwgY29kZSkgOiBuYW1lO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0sIGxuZyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBzdG9OYW1lLCBsYWJlbCwgY29kZSwgdW5kZWZpbmVkLCBwbGF0Zm9ybV07XG4gICAgfVxuICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIGxhYmVsXTtcbiAgfVxuICBjb25zdCB7IG9yaWdpbiwgZGVzdGluYXRpb24gfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgY29uc3QgdGFpbDEgPSBvcmlnaW4ubG9jYWxpdHkgPyBgLCAke29yaWdpbi5sb2NhbGl0eX0gZm9vYmFyYCA6ICcnO1xuICBjb25zdCB0YWlsMiA9IGRlc3RpbmF0aW9uLmxvY2FsaXR5ID8gYCwgJHtkZXN0aW5hdGlvbi5sb2NhbGl0eX1gIDogJyc7XG4gIGNvbnN0IG5hbWUxID0gb3JpZ2luLm5hbWU7XG4gIGNvbnN0IG5hbWUyID0gZGVzdGluYXRpb24ubmFtZTtcbiAgcmV0dXJuIFtcbiAgICB0KCdmdXR1cmUtcm91dGUnLCB7IGxuZyB9KSxcbiAgICBgJHt0KCdvcmlnaW4nLCB7IGxuZyB9KX0gJHtuYW1lMX0ke3RhaWwxfSAke3QoJ2Rlc3RpbmF0aW9uJywge1xuICAgICAgbG5nLFxuICAgIH0pfSAke25hbWUyfSR7dGFpbDJ9YCxcbiAgICBpdGVtLnRyYW5zbGF0ZWRUZXh0LFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtLCBsbmcsIHQpIHtcbiAgLy8gY2hlY2sgaWYgaTgxbiBpcyBpbml0aWFsaXplZFxuICBpZiAoIXQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHRpbWUgPSBEYXRlVGltZS5mcm9tU2Vjb25kcyhOdW1iZXIoaXRlbS5wcm9wZXJ0aWVzLnRpbWUpKTtcbiAgY29uc3Qgbm93ID0gRGF0ZVRpbWUubm93KCk7XG4gIGxldCBzdHIgPSBpdGVtLnByb3BlcnRpZXMuYXJyaXZlQnlcbiAgICA/IHQoJ2Fycml2YWwnLCB7IGxuZyB9KVxuICAgIDogdCgnZGVwYXJ0dXJlJywgeyBsbmcgfSk7XG4gIGlmICh0aW1lLmhhc1NhbWUobm93LCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dCgndG9kYXktYXQnKX1gO1xuICB9IGVsc2UgaWYgKHRpbWUuaGFzU2FtZShub3cucGx1cyh7IGRheXM6IDEgfSksICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0KCd0b21vcnJvdy1hdCcsIHsgbG5nIH0pfWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3RpbWUudG9Gb3JtYXQoJ2NjYyBkLkwuJyl9YDtcbiAgfVxuICBzdHIgPSBgJHtzdHJ9ICR7dGltZS50b0Zvcm1hdCgnSEg6bW0nKX1gO1xuICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gIGlmIChcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gZ2V0TGFiZWwoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCA9ICh7IHN1Z2dlc3Rpb25zLCB0LCBsbmcgfSkgPT4ge1xuICBsZXQgbGFiZWwgPSBbXTtcbiAgY29uc3QgZmlyc3RTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbnNbMF07XG4gIGlmIChmaXJzdFN1Z2dlc3Rpb24pIHtcbiAgICBpZiAoZmlyc3RTdWdnZXN0aW9uLnR5cGUgJiYgZmlyc3RTdWdnZXN0aW9uLnR5cGUuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBsYWJlbC5wdXNoKHQoJ2Zhdm91cml0ZScsIHsgbG5nIH0pKTtcbiAgICB9XG4gICAgbGFiZWwgPSBsYWJlbC5jb25jYXQoZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoc3VnZ2VzdGlvbnNbMF0sIGxuZykpO1xuICB9XG4gIHJldHVybiBbLi4ubmV3IFNldChsYWJlbCldLmpvaW4oJyAtICcpO1xufTtcbiIsImltcG9ydCB7IGdldE5hbWVMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbi8qKlxuICogUmV0dXJucyBsYWJlbCBmb3IgcHJvcGVydGllc1xuICpcbiAqIEBuYW1lIGdldExhYmVsXG4gKiBAcGFyYW0geyp9IHByb3BlcnRpZXMgb2JqZWN0XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYWJlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0TmFtZUxhYmVsKHByb3BlcnRpZXMsIHRydWUpO1xuICBzd2l0Y2ggKHByb3BlcnRpZXMubGF5ZXIpIHtcbiAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgY2FzZSAnYmFjayc6XG4gICAgICByZXR1cm4gcGFydHNbMV0gfHwgcGFydHNbMF07XG4gICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgIHJldHVybiBwYXJ0c1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgJiYgcGFydHNbMV0gIT09ICcnXG4gICAgICAgID8gcGFydHMuam9pbignLCAnKVxuICAgICAgICA6IHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICB9XG59XG4iLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBpbmRleC5qcy5MSUNFTlNFLnR4dCAqL1xuIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwicmVhY3RcIikpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXCJyZWFjdFwiXSx0KTtlbHNle3ZhciBuPVwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP3QocmVxdWlyZShcInJlYWN0XCIpKTp0KGUucmVhY3QpO2Zvcih2YXIgbyBpbiBuKShcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmUpW29dPW5bb119fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXs4ODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLHI7cj12b2lkIDAhPT1uLmc/bi5nOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsbz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17aWdub3JlOlwiW2RhdGEtc2Nyb2xsLWlnbm9yZV1cIixoZWFkZXI6bnVsbCx0b3BPbkVtcHR5SGFzaDohMCxzcGVlZDo1MDAsc3BlZWRBc0R1cmF0aW9uOiExLGR1cmF0aW9uTWF4Om51bGwsZHVyYXRpb25NaW46bnVsbCxjbGlwOiEwLG9mZnNldDowLGVhc2luZzpcImVhc2VJbk91dEN1YmljXCIsY3VzdG9tRWFzaW5nOm51bGwsdXBkYXRlVVJMOiEwLHBvcHN0YXRlOiEwLGVtaXRFdmVudHM6ITB9LG49ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhcmd1bWVudHMsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0KXtpZighdC5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm47ZVtuXT10W25dfX0pKSxlfSxvPWZ1bmN0aW9uKGUpe1wiI1wiPT09ZS5jaGFyQXQoMCkmJihlPWUuc3Vic3RyKDEpKTtmb3IodmFyIHQsbj1TdHJpbmcoZSksbz1uLmxlbmd0aCxyPS0xLHU9XCJcIixpPW4uY2hhckNvZGVBdCgwKTsrK3I8bzspe2lmKDA9PT0odD1uLmNoYXJDb2RlQXQocikpKXRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlcjogdGhlIGlucHV0IGNvbnRhaW5zIFUrMDAwMC5cIik7dSs9dD49MSYmdDw9MzF8fDEyNz09dHx8MD09PXImJnQ+PTQ4JiZ0PD01N3x8MT09PXImJnQ+PTQ4JiZ0PD01NyYmNDU9PT1pP1wiXFxcXFwiK3QudG9TdHJpbmcoMTYpK1wiIFwiOnQ+PTEyOHx8NDU9PT10fHw5NT09PXR8fHQ+PTQ4JiZ0PD01N3x8dD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyP24uY2hhckF0KHIpOlwiXFxcXFwiK24uY2hhckF0KHIpfXJldHVyblwiI1wiK3V9LHI9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCxkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpfSx1PWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuPXQscGFyc2VJbnQoZS5nZXRDb21wdXRlZFN0eWxlKG4pLmhlaWdodCwxMCkrdC5vZmZzZXRUb3ApOjA7dmFyIG59LGk9ZnVuY3Rpb24odCxuLG8pezA9PT10JiZkb2N1bWVudC5ib2R5LmZvY3VzKCksb3x8KHQuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dCYmKHQuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIi0xXCIpLHQuZm9jdXMoKSx0LnN0eWxlLm91dGxpbmU9XCJub25lXCIpLGUuc2Nyb2xsVG8oMCxuKSl9LHM9ZnVuY3Rpb24odCxuLG8scil7aWYobi5lbWl0RXZlbnRzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLkN1c3RvbUV2ZW50KXt2YXIgdT1uZXcgQ3VzdG9tRXZlbnQodCx7YnViYmxlczohMCxkZXRhaWw6e2FuY2hvcjpvLHRvZ2dsZTpyfX0pO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodSl9fTtyZXR1cm4gZnVuY3Rpb24oYyxhKXt2YXIgbCxmLGQsdixwPXtjYW5jZWxTY3JvbGw6ZnVuY3Rpb24oZSl7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodiksdj1udWxsLGV8fHMoXCJzY3JvbGxDYW5jZWxcIixsKX0sYW5pbWF0ZVNjcm9sbDpmdW5jdGlvbihvLGMsYSl7cC5jYW5jZWxTY3JvbGwoKTt2YXIgZj1uKGx8fHQsYXx8e30pLGg9XCJbb2JqZWN0IE51bWJlcl1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSxtPWh8fCFvLnRhZ05hbWU/bnVsbDpvO2lmKGh8fG0pe3ZhciB5PWUucGFnZVlPZmZzZXQ7Zi5oZWFkZXImJiFkJiYoZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGYuaGVhZGVyKSk7dmFyIGIsZyx3LEU9dShkKSxPPWg/bzpmdW5jdGlvbih0LG4sbyx1KXt2YXIgaT0wO2lmKHQub2Zmc2V0UGFyZW50KWRve2krPXQub2Zmc2V0VG9wLHQ9dC5vZmZzZXRQYXJlbnR9d2hpbGUodCk7cmV0dXJuIGk9TWF0aC5tYXgoaS1uLW8sMCksdSYmKGk9TWF0aC5taW4oaSxyKCktZS5pbm5lckhlaWdodCkpLGl9KG0sRSxwYXJzZUludChcImZ1bmN0aW9uXCI9PXR5cGVvZiBmLm9mZnNldD9mLm9mZnNldChvLGMpOmYub2Zmc2V0LDEwKSxmLmNsaXApLFM9Ty15LF89cigpLEk9MCxNPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGVlZEFzRHVyYXRpb24/dC5zcGVlZDpNYXRoLmFicyhlLzFlMyp0LnNwZWVkKTtyZXR1cm4gdC5kdXJhdGlvbk1heCYmbj50LmR1cmF0aW9uTWF4P3QuZHVyYXRpb25NYXg6dC5kdXJhdGlvbk1pbiYmbjx0LmR1cmF0aW9uTWluP3QuZHVyYXRpb25NaW46cGFyc2VJbnQobiwxMCl9KFMsZiksTD1mdW5jdGlvbih0KXtifHwoYj10KSxJKz10LWIsdz15K1MqZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm5cImVhc2VJblF1YWRcIj09PWUuZWFzaW5nJiYobj10KnQpLFwiZWFzZU91dFF1YWRcIj09PWUuZWFzaW5nJiYobj10KigyLXQpKSxcImVhc2VJbk91dFF1YWRcIj09PWUuZWFzaW5nJiYobj10PC41PzIqdCp0Oig0LTIqdCkqdC0xKSxcImVhc2VJbkN1YmljXCI9PT1lLmVhc2luZyYmKG49dCp0KnQpLFwiZWFzZU91dEN1YmljXCI9PT1lLmVhc2luZyYmKG49LS10KnQqdCsxKSxcImVhc2VJbk91dEN1YmljXCI9PT1lLmVhc2luZyYmKG49dDwuNT80KnQqdCp0Oih0LTEpKigyKnQtMikqKDIqdC0yKSsxKSxcImVhc2VJblF1YXJ0XCI9PT1lLmVhc2luZyYmKG49dCp0KnQqdCksXCJlYXNlT3V0UXVhcnRcIj09PWUuZWFzaW5nJiYobj0xLSAtLXQqdCp0KnQpLFwiZWFzZUluT3V0UXVhcnRcIj09PWUuZWFzaW5nJiYobj10PC41PzgqdCp0KnQqdDoxLTgqLS10KnQqdCp0KSxcImVhc2VJblF1aW50XCI9PT1lLmVhc2luZyYmKG49dCp0KnQqdCp0KSxcImVhc2VPdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPTErLS10KnQqdCp0KnQpLFwiZWFzZUluT3V0UXVpbnRcIj09PWUuZWFzaW5nJiYobj10PC41PzE2KnQqdCp0KnQqdDoxKzE2Ki0tdCp0KnQqdCp0KSxlLmN1c3RvbUVhc2luZyYmKG49ZS5jdXN0b21FYXNpbmcodCkpLG58fHR9KGYsZz0oZz0wPT09TT8wOkkvTSk+MT8xOmcpLGUuc2Nyb2xsVG8oMCxNYXRoLmZsb29yKHcpKSxmdW5jdGlvbih0LG4pe3ZhciByPWUucGFnZVlPZmZzZXQ7aWYodD09bnx8cj09bnx8KHk8biYmZS5pbm5lckhlaWdodCtyKT49XylyZXR1cm4gcC5jYW5jZWxTY3JvbGwoITApLGkobyxuLGgpLHMoXCJzY3JvbGxTdG9wXCIsZixvLGMpLGI9bnVsbCx2PW51bGwsITB9KHcsTyl8fCh2PWUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpLGI9dCl9OzA9PT1lLnBhZ2VZT2Zmc2V0JiZlLnNjcm9sbFRvKDAsMCksZnVuY3Rpb24oZSx0LG4pe3R8fGhpc3RvcnkucHVzaFN0YXRlJiZuLnVwZGF0ZVVSTCYmaGlzdG9yeS5wdXNoU3RhdGUoe3Ntb290aFNjcm9sbDpKU09OLnN0cmluZ2lmeShuKSxhbmNob3I6ZS5pZH0sZG9jdW1lbnQudGl0bGUsZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudD9cIiN0b3BcIjpcIiNcIitlLmlkKX0obyxoLGYpLFwibWF0Y2hNZWRpYVwiaW4gZSYmZS5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpLm1hdGNoZXM/aShvLE1hdGguZmxvb3IoTyksITEpOihzKFwic2Nyb2xsU3RhcnRcIixmLG8sYykscC5jYW5jZWxTY3JvbGwoITApLGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpKX19fSxoPWZ1bmN0aW9uKHQpe2lmKCF0LmRlZmF1bHRQcmV2ZW50ZWQmJiEoMCE9PXQuYnV0dG9ufHx0Lm1ldGFLZXl8fHQuY3RybEtleXx8dC5zaGlmdEtleSkmJlwiY2xvc2VzdFwiaW4gdC50YXJnZXQmJihmPXQudGFyZ2V0LmNsb3Nlc3QoYykpJiZcImFcIj09PWYudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiYhdC50YXJnZXQuY2xvc2VzdChsLmlnbm9yZSkmJmYuaG9zdG5hbWU9PT1lLmxvY2F0aW9uLmhvc3RuYW1lJiZmLnBhdGhuYW1lPT09ZS5sb2NhdGlvbi5wYXRobmFtZSYmLyMvLnRlc3QoZi5ocmVmKSl7dmFyIG4scjt0cnl7bj1vKGRlY29kZVVSSUNvbXBvbmVudChmLmhhc2gpKX1jYXRjaChlKXtuPW8oZi5oYXNoKX1pZihcIiNcIj09PW4pe2lmKCFsLnRvcE9uRW1wdHlIYXNoKXJldHVybjtyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1lbHNlIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKTsocj1yfHxcIiN0b3BcIiE9PW4/cjpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLGZ1bmN0aW9uKHQpe2lmKGhpc3RvcnkucmVwbGFjZVN0YXRlJiZ0LnVwZGF0ZVVSTCYmIWhpc3Rvcnkuc3RhdGUpe3ZhciBuPWUubG9jYXRpb24uaGFzaDtuPW58fFwiXCIsaGlzdG9yeS5yZXBsYWNlU3RhdGUoe3Ntb290aFNjcm9sbDpKU09OLnN0cmluZ2lmeSh0KSxhbmNob3I6bnx8ZS5wYWdlWU9mZnNldH0sZG9jdW1lbnQudGl0bGUsbnx8ZS5sb2NhdGlvbi5ocmVmKX19KGwpLHAuYW5pbWF0ZVNjcm9sbChyLGYpKX19LG09ZnVuY3Rpb24oZSl7aWYobnVsbCE9PWhpc3Rvcnkuc3RhdGUmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsJiZoaXN0b3J5LnN0YXRlLnNtb290aFNjcm9sbD09PUpTT04uc3RyaW5naWZ5KGwpKXt2YXIgdD1oaXN0b3J5LnN0YXRlLmFuY2hvcjtcInN0cmluZ1wiPT10eXBlb2YgdCYmdCYmISh0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobyhoaXN0b3J5LnN0YXRlLmFuY2hvcikpKXx8cC5hbmltYXRlU2Nyb2xsKHQsbnVsbCx7dXBkYXRlVVJMOiExfSl9fTtyZXR1cm4gcC5kZXN0cm95PWZ1bmN0aW9uKCl7bCYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGgsITEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsbSwhMSkscC5jYW5jZWxTY3JvbGwoKSxsPW51bGwsZj1udWxsLGQ9bnVsbCx2PW51bGwpfSxmdW5jdGlvbigpe2lmKCEoXCJxdWVyeVNlbGVjdG9yXCJpbiBkb2N1bWVudCYmXCJhZGRFdmVudExpc3RlbmVyXCJpbiBlJiZcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiaW4gZSYmXCJjbG9zZXN0XCJpbiBlLkVsZW1lbnQucHJvdG90eXBlKSl0aHJvd1wiU21vb3RoIFNjcm9sbDogVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIEphdmFTY3JpcHQgbWV0aG9kcyBhbmQgYnJvd3NlciBBUElzLlwiO3AuZGVzdHJveSgpLGw9bih0LGF8fHt9KSxkPWwuaGVhZGVyP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobC5oZWFkZXIpOm51bGwsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksbC51cGRhdGVVUkwmJmwucG9wc3RhdGUmJmUuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsbSwhMSl9KCkscH19KHIpfS5hcHBseSh0LFtdKSx2b2lkIDA9PT1vfHwoZS5leHBvcnRzPW8pfSw0MzI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz1uKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pfTpmdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz1uKSxlW29dPXRbbl19KSxyPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fG8odCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyKG4oNDcpLHQpLHIobig5MjYpLHQpLHIobigzNDkpLHQpLHIobigxMzcpLHQpLHIobig3MjkpLHQpLHIobigzODMpLHQpLHIobig0NTApLHQpLHIobigzNTgpLHQpLHIobig3NTMpLHQpLHIobig4NjkpLHQpLHIobigzNTIpLHQpLHIobig0NDYpLHQpLHIobigxNjQpLHQpLHIobigzMDUpLHQpLHIobig1MDIpLHQpfSwzNDk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQXJyb3dOYXZpZ2F0aW9uPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VBcnJvd05hdmlnYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5saXN0SXRlbXMsbj1lLm9uQXJyb3dVcE9yRG93bixyPSgwLG8udXNlU3RhdGUpKDApLHU9clswXSxpPXJbMV0scz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oZSl7aShlKX0pLFt0XSksYz1mdW5jdGlvbihlKXt2YXIgbz1lLmtleTtpZihudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aClpZihcIkFycm93VXBcIj09PW8pbiYmbigpLGUucHJldmVudERlZmF1bHQoKSxzKHU+MD91LTE6dC5sZW5ndGgtMSk7ZWxzZXtpZihcIkFycm93RG93blwiIT09bylyZXR1cm47biYmbigpLGUucHJldmVudERlZmF1bHQoKSx1PHQubGVuZ3RoLTE/cyh1KzEpOnMoMCl9fTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGMpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGMpfX0pKSwoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cygwKX0pLFt0XSkse3NlbGVjdGVkSW5kZXg6dX19fSw0NDY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRGVib3VuY2U9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZURlYm91bmNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MzAwKTt2YXIgbj0oMCxvLnVzZVN0YXRlKShlKSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgbj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3UoZSl9KSx0KTtyZXR1cm4gZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQobil9fSksW2UsdF0pLHJ9fSwxNjQ6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRWxlbWVudFNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUVsZW1lbnRTaXplPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPSgwLG8udXNlUmVmKShudWxsKTtyZXR1cm5bbix7d2lkdGg6bnVsbD09PShlPW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2xpZW50V2lkdGgsaGVpZ2h0Om51bGw9PT0odD1udWxsPT1uP3ZvaWQgMDpuLmN1cnJlbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNsaWVudEhlaWdodH1dfSx0LmRlZmF1bHQ9dC51c2VFbGVtZW50U2l6ZX0sMTM3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj1mdW5jdGlvbihlKXt2YXIgdD0oMCxvLnVzZVJlZikobnVsbCksbj0oMCxvLnVzZVN0YXRlKSghMSkscj1uWzBdLHU9blsxXSxpPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07dSh0LmlzSW50ZXJzZWN0aW5nKX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2lmKHdpbmRvdyYmd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKXt2YXIgbj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaSxlKSxvPXQuY3VycmVudDtyZXR1cm4gdC5jdXJyZW50JiZuLm9ic2VydmUodC5jdXJyZW50KSxmdW5jdGlvbigpe28mJm4udW5vYnNlcnZlKG8pfX11KCExKX0pLFt0LGVdKSx7Y29udGFpbmVyUmVmOnQsaXNWaXNpYmxlOnJ9fSx0LmRlZmF1bHQ9dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcn0sNzI5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzQnJlYWtwb2ludD12b2lkIDA7dmFyIG89bigxNTYpLHI9big0MzIpLHU9e3hzOjEsbW9iaWxlU21hbGw6MzIwLG1vYmlsZTozNzUsdGFibGV0Ojc2OCx0YWJsZXRMYXJnZTo5MjAsZGVza3RvcFNtYWxsOjEwMjQsZGVza3RvcDoxMjYwLGRlc2t0b3BMYXJnZToxNDQwfTt0LnVzZUlzQnJlYWtwb2ludD1mdW5jdGlvbihlKXt2YXIgdD1cInN0cmluZ1wiPT10eXBlb2YgZT91W2VdOmUsbj0oMCxvLnVzZVN0YXRlKShudWxsKSxpPW5bMF0scz1uWzFdLGM9KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7cyh3aW5kb3cuaW5uZXJXaWR0aCl9KSxbXSk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2MoKX0pLFtdKSwoMCxyLnVzZU9uUmVzaXplKShjKSxpPj10fSx0LmRlZmF1bHQ9dC51c2VJc0JyZWFrcG9pbnR9LDQ1MDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc0xvYWRpbmdBZnRlckVycm9yPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc0xvYWRpbmdBZnRlckVycm9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49KDAsby51c2VTdGF0ZSkodCkscj1uWzBdLHU9blsxXTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7ZXx8dSh0KX0pLFtlLHRdKSxlJiZyfX0sMzA1OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTW9iaWxlPXZvaWQgMDt2YXIgbz1uKDcyOSk7dC51c2VJc01vYmlsZT1mdW5jdGlvbigpe3JldHVybiEoMCxvLnVzZUlzQnJlYWtwb2ludCkoXCJ0YWJsZXRcIil9LHQuZGVmYXVsdD10LnVzZUlzTW9iaWxlfSwzODM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P28udXNlTGF5b3V0RWZmZWN0Om8udXNlRWZmZWN0LHQuZGVmYXVsdD10LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3R9LDc1MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbkxvc2VGb2N1c1dpdGhpbj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25Mb3NlRm9jdXNXaXRoaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWYsbj1lLmNhbGxiYWNrLHI9ZS53YXRjaDsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZTtpZihyKXJldHVybihudWxsPT09KGU9dC5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5tYXRjaGVzKFwiOmZvY3VzLXdpdGhpblwiKSk/dm9pZCAwOm4oKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpfX0pLFtuLHQscl0pfSx0LmRlZmF1bHQ9dC51c2VPbkxvc2VGb2N1c1dpdGhpbn0sNTAyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uUmVzaXplPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPblJlc2l6ZT1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlKHdpbmRvdy5pbm5lcldpZHRoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCx7cGFzc2l2ZTohMH0pLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCl9fSksW10pfSx0LmRlZmF1bHQ9dC51c2VPblJlc2l6ZX0sMzUyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uV2luZG93Rm9jdXM9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uV2luZG93Rm9jdXM9ZnVuY3Rpb24oZSl7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7ZSYmXCJ2aXNpYmxlXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmUoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQpfX0pLFtlXSl9fSw0NzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPdXRzaWRlUmVhY3Rlcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT3V0c2lkZVJlYWN0ZXI9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKG4pe2UuY3VycmVudCYmIWUuY3VycmVudC5jb250YWlucyhuLnRhcmdldCkmJnQoKX0oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixuKSxmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixuKX19KSl9fSw4Njk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlUnVuQWZ0ZXJVcGRhdGU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZVJ1bkFmdGVyVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9KDAsby51c2VSZWYpKG51bGwpO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlLmN1cnJlbnQmJihlLmN1cnJlbnQoKSxlLmN1cnJlbnQ9bnVsbCl9KSksZnVuY3Rpb24odCl7ZS5jdXJyZW50PXR9fSx0LmRlZmF1bHQ9dC51c2VSdW5BZnRlclVwZGF0ZX0sOTI2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNjcm9sbExvY2s9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZVNjcm9sbExvY2s9ZnVuY3Rpb24oKXtyZXR1cm57bG9jazooMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuc2Nyb2xsWStcInB4XCIsdD1kb2N1bWVudC5ib2R5O3Quc3R5bGUucG9zaXRpb249XCJmaXhlZFwiLHQuc3R5bGUudG9wPVwiLVwiK2V9KSxbXSksdW5sb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmJvZHksdD1lLnN0eWxlLnRvcCxuPS0xKnBhcnNlSW50KHR8fFwiMFwiKTtlLnN0eWxlLnBvc2l0aW9uPVwiXCIsZS5zdHlsZS50b3A9XCJcIixuJiZ3aW5kb3cuc2Nyb2xsVG8oMCwtMSpwYXJzZUludCh0fHxcIjBcIikpfSksW10pfX19LDM1ODpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VTbW9vdGhTY3JvbGw9dm9pZCAwO3ZhciByPW4oMTU2KSx1PW8obig4ODgpKTt0LnVzZVNtb290aFNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD0oMCxyLnVzZVJlZikobnVsbCksbj1lLnJlZixvPWUub2Zmc2V0LGk9dm9pZCAwPT09bz8wOm8scz1lLnNwZWVkLGM9dm9pZCAwPT09cz81MDA6cztyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dC5jdXJyZW50PW5ldyB1LmRlZmF1bHQobnVsbCx7c3BlZWQ6YyxzcGVlZEFzRHVyYXRpb246ITB9KX0pLFtdKSwoMCxyLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtuJiZ0LmN1cnJlbnQmJnQuY3VycmVudC5hbmltYXRlU2Nyb2xsKG4uY3VycmVudCxudWxsLHtvZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdXBkYXRlVVJMOiExfSl9KSxbaSxuXSl9fSwxNTY6ZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWV9fSxuPXt9O2Z1bmN0aW9uIG8oZSl7dmFyIHI9bltlXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIHU9bltlXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbZV0uY2FsbCh1LmV4cG9ydHMsdSx1LmV4cG9ydHMsbyksdS5leHBvcnRzfXJldHVybiBvLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxvKDQzMil9KCl9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXCI7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBTdWdnZXN0aW9uSXRlbSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1zdWdnZXN0aW9uLWl0ZW0nO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHtcbiAgZ2V0U3VnZ2VzdGlvbkNvbnRlbnQsXG4gIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUsXG59IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuZnVuY3Rpb24gU3VnZ2VzdGlvbih7XG4gIGl0ZW0sXG4gIGxuZyxcbiAgZ2V0SXRlbVByb3BzLFxuICBoaWdobGlnaHRlZEluZGV4LFxuICBpdGVtSW5kZXgsXG4gIHN0eWxlcyxcbiAgLi4ucmVzdFxufSkge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBuZXdJdGVtID1cbiAgICBpdGVtLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgID8ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgdHJhbnNsYXRlZFRleHQ6IHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSwgbG5nLCB0KSxcbiAgICAgICAgfVxuICAgICAgOiBpdGVtO1xuICBjb25zdCBjb250ZW50ID0gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSwgbG5nLCB0KTtcbiAgcmV0dXJuIChcbiAgICA8bGlcbiAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uLFxuICAgICAgICBoaWdobGlnaHRlZEluZGV4ID09PSBpdGVtSW5kZXggJiYgc3R5bGVzLnN1Z2dlc3Rpb25IaWdobGlnaHRlZCxcbiAgICAgICl9XG4gICAgICB7Li4uZ2V0SXRlbVByb3BzKHsgaW5kZXg6IGl0ZW1JbmRleCB9KX1cbiAgICA+XG4gICAgICA8U3VnZ2VzdGlvbkl0ZW0gaXRlbT17bmV3SXRlbX0gY29udGVudD17Y29udGVudH0gbG5nPXtsbmd9IHsuLi5yZXN0fSAvPlxuICAgIDwvbGk+XG4gICk7XG59XG5jb25zdCBpdGVtU2hhcGUgPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzZWxlY3RlZEljb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWNvbkNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0cmFuc2xhdGVkVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcHJvcGVydGllczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBsYXllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsb2NhbGFkbWluOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc291cmNlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFycm93Q2xpY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGVzdGluYXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgbG9jYWxhZG1pbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgICBvcmlnaW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgbG9jYWxhZG1pbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgfSksXG59KTtcblxuU3VnZ2VzdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGl0ZW06IGl0ZW1TaGFwZS5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZ2V0SXRlbVByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBoaWdobGlnaHRlZEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFN1Z2dlc3Rpb25zKHtcbiAgc3VnZ2VzdGlvbnMsXG4gIGdldE1lbnVQcm9wcyxcbiAgZ2V0SXRlbVByb3BzLFxuICBsbmcsXG4gIHN0eWxlcyxcbiAgaGlkZGVuLFxuICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b24sXG4gIGhhbmRsZUNsZWFySGlzdG9yeSxcbiAgLi4ucmVzdFxufSkge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICBzdHlsZXMuc3VnZ2VzdGlvbnNDb250YWluZXJPcGVuLFxuICAgICAgICBzdHlsZXMuc3VnZ2VzdGlvbnNDb250YWluZXIsXG4gICAgICAgIGhpZGRlbiAmJiAnaGlkZGVuJyxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5zdWdnZXN0aW9uc0xpc3R9IHsuLi5nZXRNZW51UHJvcHMoKX0+XG4gICAgICAgIHtzdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24sIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFN1Z2dlc3Rpb25cbiAgICAgICAgICAgICAga2V5PXtgJHtzdWdnZXN0aW9uLnR5cGV9LSR7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmdpZCB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmd0ZnNJZFxuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgZ2V0SXRlbVByb3BzPXtnZXRJdGVtUHJvcHN9XG4gICAgICAgICAgICAgIGl0ZW1JbmRleD17aX1cbiAgICAgICAgICAgICAgaXRlbT17c3VnZ2VzdGlvbn1cbiAgICAgICAgICAgICAgbG5nPXtsbmd9XG4gICAgICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICAgIHtyZW5kZXJDbGVhckhpc3RvcnlCdXR0b24gJiYgKFxuICAgICAgICAgIDxsaSB7Li4uZ2V0SXRlbVByb3BzKHsgaW5kZXg6IHN1Z2dlc3Rpb25zLmxlbmd0aCB9KX0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFySGlzdG9yeX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1zZWFyY2gtaGlzdG9yeSddfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnY2xlYXItc2VhcmNoLWhpc3RvcnknLCB7IGxuZyB9KX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICl9XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5TdWdnZXN0aW9ucy5wcm9wVHlwZXMgPSB7XG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihpdGVtU2hhcGUpLmlzUmVxdWlyZWQsXG4gIGdldE1lbnVQcm9wczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0SXRlbVByb3BzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b246IFByb3BUeXBlcy5ib29sLFxuICBoYW5kbGVDbGVhckhpc3Rvcnk6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuU3VnZ2VzdGlvbnMuZGVmYXVsdFByb3BzID0ge1xuICByZW5kZXJDbGVhckhpc3RvcnlCdXR0b246IGZhbHNlLFxuICBoYW5kbGVDbGVhckhpc3Rvcnk6ICgpID0+IHVuZGVmaW5lZCxcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBJbnB1dCBjbGVhciBidXR0b24gZWxlbWVudFxuICogQHR5cGVkZWYge29iamVjdH0gQ2xlYXJCdXR0b25Qcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbG9yIC8vIGhleCBjb2xvciBzdHJpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsbmcgLy8gbGFuZ3VhZ2UsIGVnLiAnZmknXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IGNsZWFySW5wdXRcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gW29uS2V5RG93bl1cbiAqIEBwYXJhbSB7Q2xlYXJCdXR0b25Qcm9wc30gcHJvcHNcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH1cbiAqL1xuZXhwb3J0IGNvbnN0IENsZWFyQnV0dG9uID0gKHsgY29sb3IsIGxuZywgY2xlYXJJbnB1dCwgb25LZXlEb3duLCBzdHlsZXMgfSkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICBvbkNsaWNrPXtjbGVhcklucHV0fVxuICAgICAgYXJpYS1sYWJlbD17dCgnY2xlYXItYnV0dG9uLWxhYmVsJywgeyBsbmcgfSl9XG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICA+XG4gICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXtjb2xvcn0gLz5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn07XG5cbkNsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZykuaXNSZXF1aXJlZCxcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlUmVmLCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQ2xlYXJCdXR0b24gfSBmcm9tICcuL0NsZWFyQnV0dG9uJztcbmltcG9ydCB7IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIElucHV0KHtcbiAgaWQsXG4gIGxuZyxcbiAgdmFsdWUsXG4gIHBsYWNlaG9sZGVyLFxuICByZXF1aXJlZCxcbiAgZ2V0SW5wdXRQcm9wcyxcbiAgZ2V0TGFiZWxQcm9wcyxcbiAgY2xlYXJJbnB1dCxcbiAgYXJpYUxhYmVsLFxuICBpbnB1dFJlZixcbiAgc3R5bGVzLFxuICByZW5kZXJMYWJlbCxcbiAgaXNNb2JpbGUsXG4gIGlucHV0Q2xhc3NOYW1lLFxuICB0cmFuc3BvcnRNb2RlLFxuICBjbGVhckJ1dHRvbkNvbG9yLFxuICBhdXRvRm9jdXMsXG4gIGlucHV0T25CbHVyLFxufSkge1xuICBjb25zdCBjdXJzb3JSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsICYmIGN1cnNvclJlZi5jdXJyZW50ICE9PSBudWxsICYmIGVsID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JSZWYuY3VycmVudCwgY3Vyc29yUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY3Vyc29yUmVmLmN1cnJlbnQgPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgIHtyZW5kZXJMYWJlbCAmJiAoXG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIHsuLi5nZXRMYWJlbFByb3BzKHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzWydzci1vbmx5J10sXG4gICAgICAgICAgICBodG1sRm9yOiBpZCxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIHthcmlhTGFiZWx9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICApfVxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLWF1dG9mb2N1c1xuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICBzdHlsZXMuaW5wdXQsXG4gICAgICAgICAgaXNNb2JpbGUgJiYgdHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJycsXG4gICAgICAgICAgc3R5bGVzW2lkXSB8fCAnJyxcbiAgICAgICAgICB2YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnLFxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lLFxuICAgICAgICApfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgey4uLmdldElucHV0UHJvcHMoe1xuICAgICAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiBpbnB1dE9uQmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICB9KX1cbiAgICAgIC8+XG4gICAgICB7dmFsdWUgJiYgKFxuICAgICAgICA8Q2xlYXJCdXR0b25cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBjbGVhcklucHV0PXsoKSA9PiBjbGVhcklucHV0KGlucHV0UmVmKX1cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICBjb2xvcj17Y2xlYXJCdXR0b25Db2xvcn1cbiAgICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIGNsZWFySW5wdXQoaW5wdXRSZWYpfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuSW5wdXQucHJvcFR5cGVzID0ge1xuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGdldElucHV0UHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldExhYmVsUHJvcHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG4gIHJlbmRlckxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRyYW5zcG9ydE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsZWFyQnV0dG9uQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5wdXRPbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICBhdXRvRm9jdXM6IGZhbHNlLFxuICByZW5kZXJMYWJlbDogZmFsc2UsXG4gIHRyYW5zcG9ydE1vZGU6IHVuZGVmaW5lZCxcbiAgaW5wdXRPbkJsdXI6ICgpID0+IHt9LFxufTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlQ29tYm9ib3ggfSBmcm9tICdkb3duc2hpZnQnO1xuaW1wb3J0IG1vYmlsZVN0eWxlcyBmcm9tICcuL01vYmlsZVNlYXJjaC5zY3NzJztcbmltcG9ydCBtb2JpbGVOb1Njcm9sbFN0eWxlcyBmcm9tICcuL01vYmlsZU5vU2Nyb2xsLnNjc3MnO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbnMgfSBmcm9tICcuL1N1Z2dlc3Rpb25zJztcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnLi9JbnB1dCc7XG5pbXBvcnQge1xuICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgaXNQT0lTZWFyY2gsXG59IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuLyoqXG4gKiBAdHlwZWRlZiBBdXRvc3VnZ2VzdFN0YXRlXG4gKiBAcHJvcGVydHkge2FycmF5fSBzdWdnZXN0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSByZW5kZXJNb2JpbGVcbiAqXG4gKiBAdHlwZWRlZiBNb2JpbGVWaWV3UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBFbGVtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGFjZWhvbGRlclxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gY2xlYXJJbnB1dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gb25TZWxlY3RlZEl0ZW1DaGFuZ2VcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBmb250V2VpZ2h0c1xuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gY2xlYXJPbGRTZWFyY2hlc1xuICogQHByb3BlcnR5IHtvYmplY3R9IHN1Z2dlc3Rpb25Qcm9wc1xuICogQHByb3BlcnR5IHtvYmplY3R9IGNvbG9yc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGxuZ1xuICogQHByb3BlcnR5IHtvYmplY3R9IGFyaWFQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW5wdXRDbGFzc05hbWVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVxdWlyZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9iaWxlTGFiZWxdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG93U2Nyb2xsXVxuICogQHByb3BlcnR5IHtBdXRvc3VnZ2VzdFN0YXRlfSBzdGF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZGlzcGF0Y2hcbiAqXG4gKiBAcGFyYW0ge01vYmlsZVZpZXdQcm9wc30gcHJvcHNcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH1cbiAqL1xuY29uc3QgTW9iaWxlVmlldyA9ICh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBwbGFjZWhvbGRlcixcbiAgY2xlYXJJbnB1dCxcbiAgb25TZWxlY3RlZEl0ZW1DaGFuZ2UsXG4gIGZvbnRXZWlnaHRzLFxuICBjbGVhck9sZFNlYXJjaGVzLFxuICBzdWdnZXN0aW9uUHJvcHMsXG4gIGxuZyxcbiAgYXJpYVByb3BzLFxuICB2YWx1ZSxcbiAgaW5wdXRDbGFzc05hbWUsXG4gIHJlcXVpcmVkLFxuICBtb2JpbGVMYWJlbCxcbiAgc2hvd1Njcm9sbCxcbiAgc3RhdGUsXG4gIGRpc3BhdGNoLFxuICBjb2xvcnMsXG59KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IHsgbG9jaywgdW5sb2NrIH0gPSBob29rcy51c2VTY3JvbGxMb2NrKCk7XG4gIGNvbnN0IHN0eWxlcyA9IHNob3dTY3JvbGwgPyBtb2JpbGVTdHlsZXMgOiBtb2JpbGVOb1Njcm9sbFN0eWxlcztcbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuICBjb25zdCBbaXNEaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudChhcHBFbGVtZW50KTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnJlbmRlck1vYmlsZSkge1xuICAgICAgbG9jaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmxvY2soKTtcbiAgICB9XG4gIH0sIFtzdGF0ZS5yZW5kZXJNb2JpbGVdKTtcblxuICAvKipcbiAgICogaW5kZXBlbmRlbnQgaG9va3MgaW4gbW9iaWxlIHZpZXcuXG4gICAqIGlucHV0VmFsdWUgYW5kIHN1Z2dlc3Rpb24gc3RhdGVzIGFyZSBrZXB0IGluIHRoZSBwYXJlbnRcbiAgICovXG4gIGNvbnN0IHtcbiAgICBoaWdobGlnaHRlZEluZGV4LFxuICAgIGdldExhYmVsUHJvcHMsXG4gICAgZ2V0TWVudVByb3BzLFxuICAgIGdldElucHV0UHJvcHMsXG4gICAgZ2V0SXRlbVByb3BzLFxuICAgIHNldEhpZ2hsaWdodGVkSW5kZXgsXG4gIH0gPSB1c2VDb21ib2JveCh7XG4gICAgaXRlbXM6IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgIGlucHV0VmFsdWU6IHZhbHVlLFxuICAgIGlzT3BlbjogdHJ1ZSxcbiAgICBvblNlbGVjdGVkSXRlbUNoYW5nZTogY2hhbmdlcyA9PiB7XG4gICAgICBvblNlbGVjdGVkSXRlbUNoYW5nZShjaGFuZ2VzKTtcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgfSxcbiAgICBpbnB1dElkLFxuICAgIGxhYmVsSWQsXG4gICAgc2VsZWN0ZWRJdGVtOiBudWxsLFxuICAgIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4OiAtMSxcbiAgICBvbklucHV0VmFsdWVDaGFuZ2U6ICh7IGlucHV0VmFsdWUgfSkgPT5cbiAgICAgIHN0YXRlLnJlbmRlck1vYmlsZSAmJiAvLyBwcmV2ZW50IHVwZGF0aW5nIHZhbHVlIHdoZW4gdGhlIHNlYXJjaCBpcyBub3Qgb3BlblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnSU5QVVRfQ0hBTkdFJywgdmFsdWU6IGlucHV0VmFsdWUgfSksXG4gICAgc3RhdGVSZWR1Y2VyOiAob2xkU3RhdGUsIHsgY2hhbmdlcywgdHlwZSB9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0S2V5RG93bkVzY2FwZToge1xuICAgICAgICAgIHNldEhpZ2hsaWdodGVkSW5kZXgoLTEpO1xuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ1RPR0dMRV9NRU5VJywgaXNNb2JpbGU6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgdXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcy5JbnB1dEtleURvd25FbnRlcjpcbiAgICAgICAgICBpZiAoc3RhdGUubG9hZGluZykge1xuICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnUEVORElOR19FTlRFUicsIGVudGVyUGVuZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGlmIG5vbmUgaXMgaGlnaGxpZ2h0ZWRcbiAgICAgICAgICBpZiAob2xkU3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNoYW5nZXMsXG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogc3RhdGUuc3VnZ2VzdGlvbnNbMF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgLy8gYWxsb3dzIHRhYmJpbmcgb3V0IG9mIGlucHV0IGZpZWxkIHdpdGhvdXQgY2xvc2luZ1xuICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRCbHVyOiB7XG4gICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgICB9XG4gICAgfSxcbiAgICBpdGVtVG9TdHJpbmcoc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24gPyBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbikgOiAnJztcbiAgICB9LFxuICB9KTtcbiAgLy8gY2FsbCB0byBzdXBwcmVzcyByZWYgZXJyb3JzIGZyb20gZG93bnNoaWZ0XG4gIGdldExhYmVsUHJvcHMoe30sIHsgc3VwcHJlc3NSZWZFcnJvcjogdHJ1ZSB9KTtcbiAgZ2V0TWVudVByb3BzKHt9LCB7IHN1cHByZXNzUmVmRXJyb3I6IHRydWUgfSk7XG4gIGdldElucHV0UHJvcHMoe30sIHsgc3VwcHJlc3NSZWZFcnJvcjogdHJ1ZSB9KTtcbiAgZ2V0SXRlbVByb3BzKHsgaW5kZXg6IC0xIH0sIHsgc3VwcHJlc3NSZWZFcnJvcjogdHJ1ZSB9KTtcblxuICBjb25zdCB7IGFyaWFSZXF1aXJlZFRleHQsIFNlYXJjaEJhcklkLCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gfSA9IGFyaWFQcm9wcztcbiAgY29uc3QgYXJpYUxhYmVsID0gYXJpYVJlcXVpcmVkVGV4dFxuICAgIC5jb25jYXQoJyAnKVxuICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgLmNvbmNhdCgnICcpXG4gICAgLmNvbmNhdChhcmlhQ3VycmVudFN1Z2dlc3Rpb24pO1xuICByZXR1cm4gKFxuICAgIDxSZWFjdE1vZGFsXG4gICAgICBpc09wZW49e3N0YXRlLnJlbmRlck1vYmlsZX1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwnXX1cbiAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLW92ZXJsYXknXX1cbiAgICAgIHNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZT17ZmFsc2V9XG4gICAgICBzaG91bGRDbG9zZU9uRXNjXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLWNvbnRlbnQnXX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGNvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICctLWFjY2Vzc2libGUtcHJpbWFyeS1jb2xvcic6IGNvbG9ycy5hY2Nlc3NpYmxlUHJpbWFyeSxcbiAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGNvbG9ycy5ob3ZlcixcbiAgICAgICAgICAnLS1mb250LXdlaWdodC1tZWRpdW0nOiBmb250V2VpZ2h0cy5tZWRpdW0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1pY29uJ119XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHNldEhpZ2hsaWdodGVkSW5kZXgoLTEpO1xuICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkpIHtcbiAgICAgICAgICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4KC0xKTtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdUT0dHTEVfTUVOVScsIGlzTW9iaWxlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2FuY2VsJywgeyBsbmcgfSl9XG4gICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9XCJhcnJvd1wiIGNvbG9yPXtjb2xvcnMucHJpbWFyeX0gLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sncmlnaHQtY29sdW1uJ119PlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWxhYmVsJ119XG4gICAgICAgICAgICAgIGlkPXtsYWJlbElkfVxuICAgICAgICAgICAgICB7Li4uZ2V0TGFiZWxQcm9wcygpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bW9iaWxlTGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1xuICAgICAgICAgICAgICAgIGlzUE9JU2VhcmNoKGlkKVxuICAgICAgICAgICAgICAgICAgPyB0KCdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJywgeyBsbmcgfSlcbiAgICAgICAgICAgICAgICAgIDogcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgIGdldElucHV0UHJvcHM9e2dldElucHV0UHJvcHN9XG4gICAgICAgICAgICAgIGdldExhYmVsUHJvcHM9e2dldExhYmVsUHJvcHN9XG4gICAgICAgICAgICAgIGNsZWFySW5wdXQ9eygpID0+IGNsZWFySW5wdXQoaW5wdXRSZWYpfVxuICAgICAgICAgICAgICBhcmlhTGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgICAgICAgaW5wdXRSZWY9e2lucHV0UmVmfVxuICAgICAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICAgICAgcmVuZGVyTGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICBjbGVhckJ1dHRvbkNvbG9yPXtjb2xvcnMucHJpbWFyeX1cbiAgICAgICAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgICAgICAgIGlucHV0Q2xhc3NOYW1lPXtpbnB1dENsYXNzTmFtZX1cbiAgICAgICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgICAgICBpc01vYmlsZVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxTdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17c3RhdGUuc3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICAgIGdldE1lbnVQcm9wcz17Z2V0TWVudVByb3BzfVxuICAgICAgICAgICAgICBnZXRJdGVtUHJvcHM9e2dldEl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleD17aGlnaGxpZ2h0ZWRJbmRleH1cbiAgICAgICAgICAgICAgaXNPcGVuIC8vIHdoZW4gbW9iaWxlIHZpZXcgaXMgb3BlbiB3ZSBhbHdheXMgd2FudCB0byBzaG93IHN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIGhpZGRlbj17ZmFsc2V9XG4gICAgICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICAgICAgcmVuZGVyQ2xlYXJIaXN0b3J5QnV0dG9uXG4gICAgICAgICAgICAgIGhhbmRsZUNsZWFySGlzdG9yeT17KCkgPT4gc2V0RGlhbG9nT3Blbih0cnVlKX1cbiAgICAgICAgICAgICAgey4uLnN1Z2dlc3Rpb25Qcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgICBpc01vZGFsT3Blbj17aXNEaWFsb2dPcGVufVxuICAgICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgICBoZWFkZXJUZXh0PXt0KCdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcicsIHsgbG5nIH0pfVxuICAgICAgICAgIHByaW1hcnlCdXR0b25UZXh0PXt0KCdkZWxldGUnLCB7IGxuZyB9KX1cbiAgICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXt0KCdjYW5jZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcygpO1xuICAgICAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgICBjb2xvcnM9e2NvbG9yc31cbiAgICAgICAgICBmb250V2VpZ2h0cz17Zm9udFdlaWdodHN9XG4gICAgICAgICAgbGFuZz17bG5nfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdE1vZGFsPlxuICApO1xufTtcblxuTW9iaWxlVmlldy5wcm9wVHlwZXMgPSB7XG4gIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TZWxlY3RlZEl0ZW1DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzdWdnZXN0aW9uUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7fSkuaXNSZXF1aXJlZCxcbiAgYXJpYVByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFyaWFSZXF1aXJlZFRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBTZWFyY2hCYXJJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgbG5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHN0YXRlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe30pKS5pc1JlcXVpcmVkLFxuICAgIHJlbmRlck1vYmlsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBsb2FkaW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBkaXNwYXRjaDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1vYmlsZVZpZXc7XG4iLCJleHBvcnQgY29uc3Qgc2VhcmNoUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdJTlBVVF9DSEFOR0UnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHZhbHVlOiBhY3Rpb24udmFsdWUsXG4gICAgICB9O1xuICAgIGNhc2UgJ0ZFVENIX1NVR0dFU1RJT05TJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkaW5nOiBhY3Rpb24ubG9hZGluZyxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IGFjdGlvbi5zdWdnZXN0aW9ucyB8fCBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICAgIH07XG4gICAgY2FzZSAnQ0xFQVJfU1VHR0VTVElPTlMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAnUkVTRVRfU09VUkNFUyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc291cmNlczogYWN0aW9uLnNvdXJjZXMsXG4gICAgICB9O1xuICAgIGNhc2UgJ1NFVF9TT1VSQ0VTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzaG93T3duUGxhY2VzOiBhY3Rpb24uc2hvd093blBsYWNlcyxcbiAgICAgICAgc291cmNlczogYWN0aW9uLnNvdXJjZXMsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IGFjdGlvbi5wZW5kaW5nU2VsZWN0aW9uLFxuICAgICAgfTtcbiAgICBjYXNlICdDTEVBUic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBpc0NsZWFyZWQ6IHRydWUsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAnSU5QVVRfQkxVUic6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB2YWx1ZTogYWN0aW9uLnZhbHVlIHx8IHN0YXRlLnZhbHVlLFxuICAgICAgICBpc0NsZWFyZWQ6IGFjdGlvbi5pc01vYmlsZSA/IGZhbHNlIDogc3RhdGUuaXNDbGVhcmVkLFxuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICBzaG93T3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ1JFU0VUJzoge1xuICAgICAgcmV0dXJuIGFjdGlvbi5pbml0aWFsU3RhdGU7XG4gICAgfVxuICAgIGNhc2UgJ1BFTkRJTkdfRU5URVInOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZW50ZXJQZW5kaW5nOiBhY3Rpb24uZW50ZXJQZW5kaW5nLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnVE9HR0xFX01FTlUnOiB7XG4gICAgICBpZiAoYWN0aW9uLmlzTW9iaWxlKSB7XG4gICAgICAgIGlmICghc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcmVuZGVyTW9iaWxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXRlLmlzQ2xlYXJlZCA/ICcnIDogc3RhdGUudmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHJlbmRlck1vYmlsZTogZmFsc2UsXG4gICAgICAgICAgaXNDbGVhcmVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc01lbnVPcGVuOiAhc3RhdGUuaXNNZW51T3BlbixcbiAgICAgICAgcmVuZGVyTW9iaWxlOiBhY3Rpb24uaXNNb2JpbGUgJiYgIXN0YXRlLnJlbmRlck1vYmlsZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VSZWR1Y2VyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSTE4bmV4dFByb3ZpZGVyLCB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZXhlY3V0ZVNlYXJjaCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUnO1xuaW1wb3J0IHsgdXNlQ29tYm9ib3ggfSBmcm9tICdkb3duc2hpZnQnO1xuaW1wb3J0IEljb24sIHtcbiAgZGVmYXVsdENvbG9ycyxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgaTE4biBmcm9tICcuL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2NvbXBvbmVudHMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IHsgZ2V0U3VnZ2VzdGlvblZhbHVlLCBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCB9IGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IE1vYmlsZVZpZXcgZnJvbSAnLi9jb21wb25lbnRzL01vYmlsZVZpZXcnO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICcuL2NvbXBvbmVudHMvSW5wdXQnO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbnMgfSBmcm9tICcuL2NvbXBvbmVudHMvU3VnZ2VzdGlvbnMnO1xuaW1wb3J0IHsgc2VhcmNoUmVkdWNlciB9IGZyb20gJy4vdXRpbHMvc2VhcmNoUmVkdWNlcic7XG5cbmNvbnN0IGdldEFyaWFQcm9wcyA9ICh7XG4gIGlkLFxuICBhcmlhTGFiZWwsXG4gIGxuZyxcbiAgdCxcbiAgaXNNb2JpbGUsXG4gIHN1Z2dlc3Rpb25zLFxuICB2YWx1ZSxcbiAgcmVxdWlyZWQsXG59KSA9PiB7XG4gIGNvbnN0IGFyaWFCYXJJZCA9IGlkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgY29uc3QgU2VhcmNoQmFySWQgPVxuICAgIGFyaWFMYWJlbCB8fCB0KGFyaWFCYXJJZCwgeyBsbmcgfSkucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpLmNvbmNhdCgnLicpOyAvLyBGdWxsIHN0b3AgbWFrZXMgc2NyZWVuIHJlYWRlciBzcGVlY2ggY2xlYXJlci5cbiAgY29uc3QgYXJpYVJlcXVpcmVkVGV4dCA9IHJlcXVpcmVkID8gYCR7dCgncmVxdWlyZWQnLCB7IGxuZyB9KX0uYCA6ICcnO1xuICBjb25zdCBhcmlhTGFiZWxJbnN0cnVjdGlvbnMgPSBpc01vYmlsZVxuICAgID8gdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnLCB7IGxuZyB9KVxuICAgIDogdCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJywgeyBsbmcgfSk7XG4gIGNvbnN0IG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQgPVxuICAgIGlkID09PSAnb3JpZ2luJ1xuICAgICAgPyB0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbicsIHsgbG5nIH0pXG4gICAgICA6ICcnO1xuICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zXG4gICAgLmNvbmNhdCgnICcpXG4gICAgLmNvbmNhdChtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0KTtcblxuICBjb25zdCBhcmlhU3VnZ2VzdGlvbkxlbiA9IHQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nLCB7XG4gICAgY291bnQ6IHN1Z2dlc3Rpb25zLmxlbmd0aCxcbiAgICBsbmcsXG4gIH0pO1xuXG4gIGNvbnN0IGFyaWFDdXJyZW50U3VnZ2VzdGlvbiA9XG4gICAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoeyBzdWdnZXN0aW9ucywgdCwgbG5nIH0pIHx8IHZhbHVlXG4gICAgICA/IHQoJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nLCB7XG4gICAgICAgICAgbG5nLFxuICAgICAgICAgIHNlbGVjdGlvbjpcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KHsgc3VnZ2VzdGlvbnMsIHQsIGxuZyB9KS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIDogJyc7XG5cbiAgcmV0dXJuIHtcbiAgICBTZWFyY2hCYXJJZCxcbiAgICBhcmlhUmVxdWlyZWRUZXh0LFxuICAgIGFyaWFMYWJlbFRleHQsXG4gICAgYXJpYVN1Z2dlc3Rpb25MZW4sXG4gICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uLFxuICB9O1xufTtcblxuY29uc3QgcG9zaXRpb25zID0gW1xuICAnVmFsaXR0dSBzaWphaW50aScsXG4gICdOeWt5aW5lbiBzaWphaW50aXNpJyxcbiAgJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAnU2VsZWN0ZWQgbG9jYXRpb24nLFxuICAnVmFsZCBwb3NpdGlvbicsXG4gICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICdNaW4gcG9zaXRpb24nLFxuICAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgJ1lvdXIgY3VycmVudCBsb2NhdGlvbicsXG4gICdXeWJyYW5lIG1pZWpzY2UnLFxuXTtcblxuLyoqXG4gKiBUYWtlcyB0aGUgdGFyZ2V0cyBhbmQgbW9kaWZpZXMgdGhlbSBiYXNlZCBvbiBvd25QbGFjZXMgYW5kIGlzTG9jYXRpb25TZWFyY2hcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHMudGFyZ2V0c1xuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5pc0xvY2F0aW9uU2VhcmNoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLmlzTW9iaWxlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLm93blBsYWNlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHMuc291cmNlc1xuICogQHJldHVybnMge3N0cmluZ1tdfSBuZXdUYXJnZXRzXG4gKi9cbmNvbnN0IGdldE5ld1RhcmdldHMgPSAoe1xuICB0YXJnZXRzLFxuICBpc0xvY2F0aW9uU2VhcmNoLFxuICBpc01vYmlsZSxcbiAgb3duUGxhY2VzLFxuICBzb3VyY2VzLFxufSkgPT4ge1xuICBjb25zdCB1c2VBbGwgPSAhdGFyZ2V0cz8ubGVuZ3RoO1xuICBsZXQgbmV3VGFyZ2V0cztcbiAgaWYgKG93blBsYWNlcykge1xuICAgIG5ld1RhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKSkge1xuICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTdG9wcycpO1xuICAgIH1cbiAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJykpIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RhdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXVzZUFsbCkge1xuICAgIG5ld1RhcmdldHMgPSBbLi4udGFyZ2V0c107XG4gICAgLy8gaW4gZGVza3RvcCwgZmF2b3JpdGVzIGFyZSBhY2Nlc3NlZCB2aWEgc3ViIHNlYXJjaFxuICAgIGlmIChcbiAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICFpc01vYmlsZSAmJlxuICAgICAgKCFzb3VyY2VzLmxlbmd0aCB8fCBzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSlcbiAgICApIHtcbiAgICAgIG5ld1RhcmdldHMucHVzaCgnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3VGFyZ2V0cztcbn07XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNlYXJjaENvbnRleHQgPSB7XG4gKiAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogZmFsc2UgLy8gdHJ1ZSAvIGZhbHNlIGRvZXMgTGV0IFBlbGlhcyBzdWdnZXN0IGJhc2VkIG9uIGN1cnJlbnQgdXNlciBsb2NhdGlvblxuICogICBtaW5pbWFsUmVnZXhwOiB1bmRlZmluZWQgLy8gdXNlZCBmb3IgdGVzdGluZyBtaW4uIHJlZ2V4cC4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoJy57Mix9JyksXG4gKiAgIGxpbmVSZWdleHA6IHVuZGVmaW5lZCAvLyAgaWRlbnRpZnkgc2VhcmNoZXMgZm9yIHJvdXRlIG51bWJlcnMvbGFiZWxzOiBidXMgfCB0cmFpbiB8IG1ldHJvLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cChcbiAqICAgIC8vICAgJyheWzAtOV0rW2Etel0/JHxeW3l1bGVhcGlua3J0ZHpdJHwoXm1bMTJdP2I/JCkpJyxcbiAqICAgIC8vICAnaScsXG4gKiAgICAvLyAgKSxcbiAqICAgVVJMX1BFTElBUzogJycgLy8gdXJsIGZvciBwZWxpYXMgc2VhcmNoZXNcbiAqICAgZmVlZElEczogWydIU0wnLCAnSFNMTGF1dHRhJ10gLy8gRmVlZElkJ3MgbGlrZSAgW0hTTCwgSFNMTGF1dHRhXVxuICogICBnZW9jb2RpbmdTb3VyY2VzOiBbJ29hJywnb3NtJywnbmxzZmknXSAgLy8gc291cmNlcyBmb3IgZ2VvY29kaW5nXG4gKiAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtczsge30gIC8vIFNlYXJjaHBhcm1hcyBmcm8gZ2VvY29kaW5nXG4gKiAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogKCkgPT4gKHt9KSwgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBsb2NhdGlvbnMuXG4gKiAgIGdldEZhdm91cml0ZVN0b3BzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBzdG9wcy5cbiAqICAgZ2V0TGFuZ3VhZ2U6ICgpID0+ICh7fSksICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgY3VycmVudCBsYW5ndWFnZS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0UG9zaXRpb25zOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdXNlcidzIGdlb2xvY2F0aW9uLlxuICogICBnZXRSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgcm91dGVzLlxuICogICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBmYXZvdXJpdGUgc3RvcHMgYW5kIHN0YXRpb25zIGZyb20gZ3JhcGhxbCBBUEkuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnM6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb24uXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9ucy5cbiAqICAgc3RhcnRMb2NhdGlvbldhdGNoOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGxvY2F0ZXMgdXNlcnMgZ2VvbG9jYXRpb24uXG4gKiAgIHNhdmVTZWFyY2g6ICgpID0+ICh7fSksICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBzZWFyY2ggdG8gb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBjbGVhck9sZFNlYXJjaGVzOiAoKSA9PiAoe30pLCAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgZ2V0RnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybiBmdXR1cmUgcm91dGVzXG4gKiAgIHNhdmVGdXR1cmVSb3V0ZTogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBhIGZ1dHVyZSByb3V0ZVxuICogICBjbGVhckZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIGZ1dHVyZSByb3V0ZXNcbiAqIH07XG4gKiBjb25zdCBsYW5nID0gJ2ZpJzsgLy8gZW4sIGZpIG9yIHN2XG4gKiBjb25zdCBvblNlbGVjdCA9IChpdGVtLCBpZCkgPT4ge1xuICogICAgLy8gRnVudGlvbmFsaXR5IHdoZW4gdXNlciBzZWxlY3RzIGEgc3VnZ2VzaW9ucy4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IG9uQ2xlYXIgPSBpZCA9PiB7XG4gKiAgICAvLyBDYWxsZWQgIHdoZW4gdXNlciBjbGlja3MgdGhlIGNsZWFyIHNlYXJjaCBzdHJpbmcgYnV0dG9uLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRyYW5zcG9ydE1vZGUgPSB1bmRlZmluZWQ7XG4gKiBjb25zdCBwbGFjZWhvbGRlciA9IFwic3RvcC1uZWFyLXlvdVwiO1xuICogY29uc3QgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJywgJ1N0b3BzJywgJ1JvdXRlcyddOyAvLyBEZWZpbmVzIHdoYXQgeW91IGFyZSBzZWFyY2hpbmcuIE9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFN0YXRpb25zLCBSb3V0ZXMsIFZlaGljbGVSZW50YWxTdGF0aW9ucywgRnV0dXJlUm91dGVzLCBNYXBQb3NpdGlvbiBhbmQgQ3VycmVudFBvc2l0aW9uLiBMZWF2ZSBlbXB0eSB0byBzZWFyY2ggYWxsIHRhcmdldHMuXG4gKiBjb25zdCBzb3VyY2VzID0gWydGYXZvdXJpdGUnLCAnSGlzdG9yeScsICdEYXRhc291cmNlJ10gLy8gRGVmaW5lcyB3aGVyZSB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBhcmU6IEZhdm91cml0ZSwgSGlzdG9yeSAocHJldmlvdXNseSBzZWFyY2hlZCBzZWFyY2hlcykgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIHJldHVybiAoXG4gKiAgPERUQXV0b3N1Z2dlc3RcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgaWNvbj1cIm9yaWdpblwiIC8vIE9wdGlvbmFsIFN0cmluZyBmb3IgaWNvbiB0aGF0IGlzIHNob3duIGxlZnQgb2Ygc2VhcmNoZmllbGQuIHVzZWQgd2l0aCBJY29uIGxpYnJhcnlcbiAqICAgIGlkPVwib3JpZ2luXCIgLy8gdXNlZCBmb3Igc3R5bGUgcHJvcHMgYW5kIGluZm8gZm9yIGNvbXBvbmVudC5cbiAqICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLy8gU3RyaW5nIHRoYXQgaXMgc2hvd25zIGluaXRhbGx5IGluIHNlYXJjaCBmaWVsZFxuICogICAgdmFsdWU9XCJcIiAvLyBlLmcuIHVzZXIgdHlwZWQgc3RyaW5nIHRoYXQgaXMgc2hvd24gaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXtvbkNsZWFyfVxuICogICAgbGFuZz17bGFuZ31cbiAqICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e2dldEF1dG9TdWdnZXN0SWNvbnN9XG4gKiAgICB0cmFuc3BvcnRNb2RlPXt0cmFuc3BvcnRNb2RlfSAvLyB0cmFuc3BvcnRtb2RlIHdpdGggd2hpY2ggd2UgZmlsdGVyIHRoZSByb3V0ZXMsIGUuZy4gcm91dGUtQlVTXG4gKiAgICBnZW9jb2RpbmdTaXplPXsxMH0gLy8gZGVmaW5lcyBob3cgbWFueSBzdG9wcyBhbmQgc3RhdGlvbnMgdG8gZmV0Y2ggZnJvbSBnZW9jb2RpbmcuIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgYW5kIHN0aWxsIGdldCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHN1Z2dlc3Rpb25zLlxuICogICAgZmlsdGVyUmVzdWx0cz17cmVzdWx0cyA9PiByZXR1cm4gcmVzdWx0c30gLy8gT3B0aW9uYWwgZmlsdGVyaW5nIGZ1bmN0aW9uIGZvciByb3V0ZXMgYW5kIHN0b3BzXG4gKiAgICBoYW5kZWxWaWFQb2ludHM9eygpID0+IHJldHVybiBudWxsIH0gLy8gT3B0aW9uYWwgVmlhIHBvaW50IGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBmb2N1c0NoYW5nZT17KCkgPT4gcmV0dXJuIG51bGx9IC8vIFdoZW4gc3VnZ2VzdGlvbiBpcyBzZWxlY3RlZCwgaGFuZGxlIGNoYW5naW5nIGZvY3VzLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzdG9yZVJlZj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIEZ1bmN0aW9uYWxpdHkgdG8gc3RvcmUgcmVmcy4gQ3VycmVubHR5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gKiAgICB0YXJnZXRzPXt0YXJnZXRzfVxuICogICAgaXNNb2JpbGUgIC8vIE9wdGlvbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4gV2hldGhlciB0byB1c2UgbW9iaWxlIHNlYXJjaC5cbiAqICAgIG1vYmlsZUxhYmVsPVwiQ3VzdG9tIGxhYmVsXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBsYWJlbCB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBpbnB1dENsYXNzTmFtZT1cIlwiIC8vIE9wdGlvbmFsLiBDdXN0b20gY2xhc3NuYW1lIGFwcGxpZWQgdG8gdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCBmb3IgcHJvdmlkaW5nIENTUyBzdHlsZXMuXG4gKiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI9IC8vIE9wdGlvbmFsLiBDdXN0b24gdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZC5cbiAqXG4gKiBAdHlwZWRlZiBEVEF1dG9zdWdnZXN0UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBFbGVtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGFjZWhvbGRlclxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gb25TZWxlY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaWNvbl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmFsdWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbb25DbGVhcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGFuZ11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZ2V0QXV0b1N1Z2dlc3RJY29uc11cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtoYW5kbGVWaWFQb2ludHNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZm9jdXNDaGFuZ2VdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbc3RvcmVSZWZdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc01vYmlsZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9iaWxlTGFiZWxdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2lucHV0Q2xhc3NOYW1lXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0cmFuc2xhdGVkUGxhY2Vob2xkZXJdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXF1aXJlZF1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZm9udFdlaWdodHNdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2NvbG9yc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZVNldF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Nob3dTY3JvbGxdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc0VtYmVkZGVkXVxuICogR2VvY29kaW5nIHJlbGF0ZWQgcHJvcHNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBzZWFyY2hDb250ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RyYW5zcG9ydE1vZGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbdGFyZ2V0c11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtzb3VyY2VzXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtnZW9jb2RpbmdTaXplXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW2ZpbHRlclJlc3VsdHNdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3BhdGhPcHRzXVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyZWZQb2ludF1cbiAqIEBwYXJhbSB7RFRBdXRvc3VnZ2VzdFByb3BzfSBwcm9wc1xuICogQHJldHVybnMge0pTWC5FbGVtZW50fVxuICovXG5mdW5jdGlvbiBEVEF1dG9zdWdnZXN0KHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIHBsYWNlaG9sZGVyLFxuICBvblNlbGVjdCxcbiAgaWNvbixcbiAgdmFsdWUsXG4gIG9uQ2xlYXIsXG4gIGxhbmc6IGxuZyxcbiAgZ2V0QXV0b1N1Z2dlc3RJY29ucyxcbiAgaGFuZGxlVmlhUG9pbnRzLFxuICBmb2N1c0NoYW5nZSxcbiAgc3RvcmVSZWYsXG4gIGlzTW9iaWxlLFxuICBtb2JpbGVMYWJlbCxcbiAgaW5wdXRDbGFzc05hbWUsXG4gIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcixcbiAgcmVxdWlyZWQsXG4gIGFyaWFMYWJlbCxcbiAgZm9udFdlaWdodHMsXG4gIGNvbG9ycyxcbiAgbW9kZVNldCxcbiAgc2hvd1Njcm9sbCxcbiAgaXNFbWJlZGRlZCxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgc2VhcmNoQ29udGV4dCxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxufSkge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIHNvdXJjZXMsXG4gICAgc2hvd093blBsYWNlczogZmFsc2UsXG4gICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICBpc0NsZWFyZWQ6IGZhbHNlLFxuICAgIHJlbmRlck1vYmlsZTogZmFsc2UsXG4gICAgdmFsdWUsXG4gICAgZW50ZXJQZW5kaW5nOiBmYWxzZSxcbiAgICBpc01lbnVPcGVuOiBmYWxzZSxcbiAgfTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHNlYXJjaFJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG4gIC8vIFJlc2V0IHRoZSBzdGF0ZSB3aGVuIHZhbHVlIG9yIHNvdXJjZXMgY2hhbmdlLCB0aGlzIGFsc28gdHJpZ2dlcnMgYSBuZXcgc2VhcmNoXG4gIHVzZUVmZmVjdCgoKSA9PiBkaXNwYXRjaCh7IHR5cGU6ICdSRVNFVCcsIGluaXRpYWxTdGF0ZSB9KSwgW3ZhbHVlXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBkaXNwYXRjaCh7IHR5cGU6ICdSRVNFVF9TT1VSQ0VTJywgc291cmNlcyB9KSwgW3NvdXJjZXNdKTtcbiAgLy8gY3JlYXRlIGFuZCBzdG9yZSBpbnB1dCByZWYgaW4gdGhlIHBhcmVudCBpZiBzdG9yZVJlZiBpcyBwcm92aWRlZFxuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZihpZCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0b3JlUmVmKSB7XG4gICAgICBzdG9yZVJlZihpbnB1dFJlZi5jdXJyZW50KTtcbiAgICB9XG4gIH0sIFtpbnB1dFJlZi5jdXJyZW50XSk7XG5cbiAgY29uc3QgZmV0Y2hTdWdnZXN0aW9ucyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB1c2VBbGwgPSAhdGFyZ2V0cz8ubGVuZ3RoO1xuICAgIGNvbnN0IGlzTG9jYXRpb25TZWFyY2ggPSB1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJyk7XG5cbiAgICBjb25zdCBuZXdUYXJnZXRzID0gZ2V0TmV3VGFyZ2V0cyh7XG4gICAgICB0YXJnZXRzLFxuICAgICAgaXNMb2NhdGlvblNlYXJjaCxcbiAgICAgIGlzTW9iaWxlLFxuICAgICAgb3duUGxhY2VzOiBzdGF0ZS5zaG93T3duUGxhY2VzLFxuICAgICAgc291cmNlczogc3RhdGUuc291cmNlcyxcbiAgICB9KTtcbiAgICAvLyByZW1vdmUgIGxvY2F0aW9uIGZhdm91cml0ZXMgaW4gZGVza3RvcCBzZWFyY2ggKGNvbGxlY3Rpb24gaXRlbSByZXBsYWNlcyBpdCBpbiB0YXJnZXQgYXJyYXkpXG4gICAgY29uc3QgbmV3U291cmNlcyA9IHN0YXRlLnNvdXJjZXNcbiAgICAgID8gc3RhdGUuc291cmNlcy5maWx0ZXIoXG4gICAgICAgICAgcyA9PlxuICAgICAgICAgICAgIWlzTG9jYXRpb25TZWFyY2ggfHxcbiAgICAgICAgICAgICFzID09PSAnRmF2b3VyaXRlJyB8fFxuICAgICAgICAgICAgc3RhdGUuc2hvd093blBsYWNlcyB8fFxuICAgICAgICAgICAgaXNNb2JpbGUsXG4gICAgICAgIClcbiAgICAgIDogc3RhdGUuc291cmNlcztcbiAgICBleGVjdXRlU2VhcmNoKFxuICAgICAgbmV3VGFyZ2V0cyxcbiAgICAgIG5ld1NvdXJjZXMsXG4gICAgICB0cmFuc3BvcnRNb2RlLFxuICAgICAgc2VhcmNoQ29udGV4dCxcbiAgICAgIGZpbHRlclJlc3VsdHMsXG4gICAgICBnZW9jb2RpbmdTaXplLFxuICAgICAge1xuICAgICAgICBpbnB1dDogc3RhdGUudmFsdWUgfHwgJycsXG4gICAgICB9LFxuICAgICAgc2VhcmNoUmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ0ZFVENIX1NVR0dFU1RJT05TJyxcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3U3VnZ2VzdGlvbnMgPSAoc2VhcmNoUmVzdWx0LnJlc3VsdHMgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24gPT5cbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlICE9PSAnRnV0dXJlUm91dGUnIHx8XG4gICAgICAgICAgICAgIChzdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiZcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMudGltZSA+IERhdGUubm93KCkgLyAxMDAwKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcChzdWdnZXN0aW9uID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJyB8fFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJyB8fFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRTdWdnZXN0aW9uID0geyAuLi5zdWdnZXN0aW9uIH07XG4gICAgICAgICAgICAgIHRyYW5zbGF0ZWRTdWdnZXN0aW9uLnByb3BlcnRpZXMubGFiZWxJZCA9IHQoXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQsXG4gICAgICAgICAgICAgICAgeyBsbmcgfSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRTdWdnZXN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4gICAgICAgICAgfSk7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnRkVUQ0hfU1VHR0VTVElPTlMnLFxuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiBuZXdTdWdnZXN0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcGF0aE9wdHMsXG4gICAgICByZWZQb2ludCxcbiAgICApO1xuICB9LCBbXG4gICAgc3RhdGUudmFsdWUsXG4gICAgc3RhdGUuc291cmNlcyxcbiAgICBzdGF0ZS5zaG93T3duUGxhY2VzLFxuICAgIHRhcmdldHMsXG4gICAgdHJhbnNwb3J0TW9kZSxcbiAgICBzZWFyY2hDb250ZXh0LFxuICAgIGZpbHRlclJlc3VsdHMsXG4gICAgZ2VvY29kaW5nU2l6ZSxcbiAgICBpc01vYmlsZSxcbiAgICBsbmcsXG4gICAgcGF0aE9wdHMsXG4gICAgcmVmUG9pbnQsXG4gICAgaWQsXG4gIF0pO1xuXG4gIGNvbnN0IHNlbGVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc3VnZ2VzdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlVmlhUG9pbnRzKSB7XG4gICAgICAgIGhhbmRsZVZpYVBvaW50cyhzdWdnZXN0aW9uLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblNlbGVjdChzdWdnZXN0aW9uLCBpZCk7XG4gICAgICB9XG4gICAgICBpZiAoZm9jdXNDaGFuZ2UgJiYgKCFpc01vYmlsZSB8fCBpc0VtYmVkZGVkKSkge1xuICAgICAgICBmb2N1c0NoYW5nZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudC5ibHVyKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbaXNNb2JpbGVdLFxuICApO1xuXG4gIGNvbnN0IG9uU2VsZWN0ZWRJdGVtQ2hhbmdlID0gY2hhbmdlcyA9PlxuICAgIHNlbGVjdFN1Z2dlc3Rpb24oY2hhbmdlcy5zZWxlY3RlZEl0ZW0sIGNoYW5nZXMuaGlnaGxpZ2h0ZWRJbmRleCk7XG5cbiAgY29uc3Qge1xuICAgIGlzT3BlbixcbiAgICBoaWdobGlnaHRlZEluZGV4LFxuICAgIGdldExhYmVsUHJvcHMsXG4gICAgZ2V0TWVudVByb3BzLFxuICAgIGdldElucHV0UHJvcHMsXG4gICAgZ2V0SXRlbVByb3BzLFxuICAgIHNlbGVjdEl0ZW0sXG4gICAgb3Blbk1lbnUsXG4gICAgY2xvc2VNZW51LFxuICB9ID0gdXNlQ29tYm9ib3goe1xuICAgIGlucHV0SWQ6IGlkLFxuICAgIGlucHV0VmFsdWU6IHN0YXRlLnZhbHVlLFxuICAgIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4OiAwLFxuICAgIG9uSW5wdXRWYWx1ZUNoYW5nZTogKHsgaW5wdXRWYWx1ZSB9KSA9PlxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnSU5QVVRfQ0hBTkdFJywgdmFsdWU6IGlucHV0VmFsdWUgfSksXG4gICAgc3RhdGVSZWR1Y2VyOiB1c2VDYWxsYmFjayhcbiAgICAgIChvbGRTdGF0ZSwgeyB0eXBlLCBjaGFuZ2VzIH0pID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLkl0ZW1DbGljazpcbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRW50ZXI6IHtcbiAgICAgICAgICAgIC8vIHNldENsZWFyZWQoZmFsc2UpO1xuICAgICAgICAgICAgLy8ga2VlcCBlbnRlclByZXNzZWRSZWYgdG8gbWFrZSBzZWxlY3Rpb24gd2hlbiBzdWdnZXN0aW9ucyBoYXZlIGxvYWRlZFxuICAgICAgICAgICAgaWYgKHN0YXRlLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnUEVORElOR19FTlRFUicsIGVudGVyUGVuZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9sZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjaGFuZ2VzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgICAgICAgICAgLy8gaWYgc2VsZWN0aW5nIGZyb20gb3duIGxvY2F0aW9ucywga2VlcCBtZW51IG9wZW4gYW5kIGtlZXAgb2xkIHN0YXRlXG4gICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnU0VUX1NPVVJDRVMnLFxuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFsnRmF2b3VyaXRlJywgJ0JhY2snXSxcbiAgICAgICAgICAgICAgICBzaG93T3duUGxhY2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IGNoYW5nZXMuc2VsZWN0ZWRJdGVtLnR5cGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEl0ZW0udHlwZSA9PT0gJ2JhY2snKSB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnU0VUX1NPVVJDRVMnLFxuICAgICAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICAgICAgc2hvd093blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRDbGljazoge1xuICAgICAgICAgICAgLy8gY2xlYXIgaW5wdXQgaWYgY3VycmVudCBwb3NpdGlvbiBvciBzZWxlY3RlZCBsb2NhdGlvbiBpcyBzaG93blxuICAgICAgICAgICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uY2hhbmdlcywgaW5wdXRWYWx1ZTogJycsIGlzT3BlbjogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB1c2VDb21ib2JveC5zdGF0ZUNoYW5nZVR5cGVzLklucHV0Qmx1cjoge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uY2hhbmdlcyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IG9sZFN0YXRlLnNlbGVjdEl0ZW0sXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZTogb2xkU3RhdGUuaW5wdXRWYWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIHVzZUNvbWJvYm94LnN0YXRlQ2hhbmdlVHlwZXMuSW5wdXRLZXlEb3duRXNjYXBlOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jaGFuZ2VzLFxuICAgICAgICAgICAgICBpbnB1dFZhbHVlOiAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtzdGF0ZS5sb2FkaW5nLCB2YWx1ZSwgaXNNb2JpbGVdLFxuICAgICksXG4gICAgaXRlbXM6IHN0YXRlLnN1Z2dlc3Rpb25zLFxuICAgIGl0ZW1Ub1N0cmluZyhzdWdnZXN0aW9uKSB7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbiA/IGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKSA6ICcnO1xuICAgIH0sXG4gICAgb25TZWxlY3RlZEl0ZW1DaGFuZ2UsXG4gICAgb25Jc09wZW5DaGFuZ2U6IGNoYW5nZXMgPT4ge1xuICAgICAgaWYgKGNoYW5nZXMuaXNPcGVuICYmICFzdGF0ZS5yZW5kZXJNb2JpbGUpIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnVE9HR0xFX01FTlUnLCBpc01vYmlsZSB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgaW5wdXRPbkJsdXIgPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgaXNNb2JpbGUsXG4gICAgICB2YWx1ZTogIWlzTW9iaWxlICYmIHZhbHVlLFxuICAgICAgdHlwZTogJ0lOUFVUX0JMVVInLFxuICAgIH0pO1xuICAgIGlmICghaXNNb2JpbGUpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ1JFU0VUJyxcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsZWFySW5wdXQgPSByZWYgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ0NMRUFSJyB9KTtcbiAgICBpZiAob25DbGVhcikge1xuICAgICAgb25DbGVhcihpZCk7XG4gICAgfVxuICAgIGlmIChyZWYuY3VycmVudCkge1xuICAgICAgcmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgb3Blbk1lbnUoKTtcbiAgfTtcblxuICAvLyBGZXRjaCBzdWdnZXN0aW9ucyB3aGVuIGlzT3BlbiwgdmFsdWUsIG9yIGZldGNoU3VnZ2VzdGlvbnMgZGVwZW5kaWVzIGNoYW5nZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4gfHwgc3RhdGUucmVuZGVyTW9iaWxlKSB7XG4gICAgICBmZXRjaFN1Z2dlc3Rpb25zKHN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH0sIFtpc09wZW4sIHN0YXRlLnJlbmRlck1vYmlsZSwgc3RhdGUudmFsdWUsIGZldGNoU3VnZ2VzdGlvbnNdKTtcblxuICAvLyB0aGlzIGVmZmVjdCBoYW5kbGVzIHNlbGVjdGluZyB0aGUgc3VnZ2VzdGlvbiB3aGVuIGVudGVyIHdhcyBwcmVzc2VkIGJ1dCBzdWdnZXN0aW9ucyB3ZXJlIHN0aWxsIGxvYWRpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RhdGUuZW50ZXJQZW5kaW5nICYmICFzdGF0ZS5sb2FkaW5nKSB7XG4gICAgICBzZWxlY3RTdWdnZXN0aW9uKHN0YXRlLnN1Z2dlc3Rpb25zWzBdLCAwKTtcbiAgICAgIGNsb3NlTWVudSgpO1xuICAgIH1cbiAgfSwgW3N0YXRlLmxvYWRpbmcsIHN0YXRlLnBlbmRpbmdFbnRlciwgc3RhdGUuc3VnZ2VzdGlvbnNdKTtcblxuICBjb25zdCBiYXNlSXRlbVByb3BzID0ge1xuICAgIGxvYWRpbmc6IHN0YXRlLmxvYWRpbmcsXG4gICAgaXNNb2JpbGUsXG4gICAgYXJpYUZhdm91cml0ZVN0cmluZzogdCgnZmF2b3VyaXRlJywgeyBsbmcgfSksXG4gICAgZm9udFdlaWdodHMsXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29ucyxcbiAgICBjb2xvcnMsXG4gICAgbW9kZVNldCxcbiAgfTtcblxuICBjb25zdCB7XG4gICAgYXJpYUN1cnJlbnRTdWdnZXN0aW9uLFxuICAgIGFyaWFSZXF1aXJlZFRleHQsXG4gICAgU2VhcmNoQmFySWQsXG4gICAgYXJpYUxhYmVsVGV4dCxcbiAgfSA9IGdldEFyaWFQcm9wcyh7XG4gICAgaWQsXG4gICAgbG5nLFxuICAgIHQsXG4gICAgaXNNb2JpbGUsXG4gICAgYXJpYUxhYmVsLFxuICAgIHN1Z2dlc3Rpb25zOiBzdGF0ZS5zdWdnZXN0aW9ucyxcbiAgICB2YWx1ZTogc3RhdGUudmFsdWUsXG4gICAgcmVxdWlyZWQsXG4gIH0pO1xuXG4gIGNvbnN0IG1vYmlsZUNsZWFyT2xkU2VhcmNoZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250ZXh0LCBjbGVhck9sZFNlYXJjaGVzLCBjbGVhckZ1dHVyZVJvdXRlcyB9ID0gc2VhcmNoQ29udGV4dDtcbiAgICBpZiAoY29udGV4dCAmJiBjbGVhck9sZFNlYXJjaGVzKSB7XG4gICAgICBjbGVhck9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgaWYgKGNsZWFyRnV0dXJlUm91dGVzKSB7XG4gICAgICAgIGNsZWFyRnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgICAgfVxuICAgICAgZmV0Y2hTdWdnZXN0aW9ucyhzdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzdGF0ZS5yZW5kZXJNb2JpbGUgJiYgIWlzT3Blbikge1xuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnUkVTRVQnLCBpbml0aWFsU3RhdGUgfSk7XG4gICAgfVxuICB9LCBbc3RhdGUucmVuZGVyTW9iaWxlLCBpc09wZW5dKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNNb2JpbGUgJiYgKFxuICAgICAgICA8TW9iaWxlVmlld1xuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KHBsYWNlaG9sZGVyLCB7IGxuZyB9KX1cbiAgICAgICAgICBmb250V2VpZ2h0cz17Zm9udFdlaWdodHN9XG4gICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcz17bW9iaWxlQ2xlYXJPbGRTZWFyY2hlc31cbiAgICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICAgIG1vYmlsZUxhYmVsPXttb2JpbGVMYWJlbCB8fCB0KGlkLCB7IGxuZyB9KX1cbiAgICAgICAgICBhcmlhUHJvcHM9e3tcbiAgICAgICAgICAgIGFyaWFDdXJyZW50U3VnZ2VzdGlvbixcbiAgICAgICAgICAgIFNlYXJjaEJhcklkLFxuICAgICAgICAgICAgYXJpYVJlcXVpcmVkVGV4dCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICBsbmc9e2xuZ31cbiAgICAgICAgICBvblNlbGVjdGVkSXRlbUNoYW5nZT17b25TZWxlY3RlZEl0ZW1DaGFuZ2V9XG4gICAgICAgICAgdmFsdWU9e3N0YXRlLnZhbHVlfVxuICAgICAgICAgIGNsZWFySW5wdXQ9e2NsZWFySW5wdXR9XG4gICAgICAgICAgc3VnZ2VzdGlvblByb3BzPXtiYXNlSXRlbVByb3BzfVxuICAgICAgICAgIHNob3dTY3JvbGw9eyEhc2hvd1Njcm9sbH1cbiAgICAgICAgICBjb2xvcnM9e2NvbG9yc31cbiAgICAgICAgICBpbnB1dENsYXNzTmFtZT17aW5wdXRDbGFzc05hbWV9XG4gICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgIHN0eWxlc1snYXV0b3N1Z2dlc3QtaW5wdXQtY29udGFpbmVyJ10sXG4gICAgICAgICAgc3R5bGVzW2lkXSxcbiAgICAgICAgICBzdGF0ZS5yZW5kZXJNb2JpbGUgJiYgJ2hpZGRlbicsXG4gICAgICAgIF0pfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogY29sb3JzLnByaW1hcnksXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBjb2xvcnMuaG92ZXIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtpY29uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1pY29uJ10sXG4gICAgICAgICAgICAgIHN0eWxlc1tpZF0sXG4gICAgICAgICAgICAgIGlucHV0Q2xhc3NOYW1lICYmIHN0eWxlc1tgJHtpbnB1dENsYXNzTmFtZX0taW5wdXQtaWNvbmBdLFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdCh0KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnLCB7IGxuZyB9KSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPXtgJHtpY29ufWB9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgIGlucHV0Q2xhc3NOYW1lPXtpbnB1dENsYXNzTmFtZX1cbiAgICAgICAgICBhcmlhTGFiZWw9e2FyaWFDdXJyZW50U3VnZ2VzdGlvblxuICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIGdldElucHV0UHJvcHM9e2dldElucHV0UHJvcHN9XG4gICAgICAgICAgZ2V0TGFiZWxQcm9wcz17Z2V0TGFiZWxQcm9wc31cbiAgICAgICAgICBzZWxlY3RJdGVtPXtzZWxlY3RJdGVtfVxuICAgICAgICAgIHZhbHVlPXtzdGF0ZS52YWx1ZX1cbiAgICAgICAgICBjbGVhcklucHV0PXtjbGVhcklucHV0fVxuICAgICAgICAgIGlucHV0UmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgICAgICBjbGVhckJ1dHRvbkNvbG9yPXtjb2xvcnMucHJpbWFyeX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17dHJhbnNsYXRlZFBsYWNlaG9sZGVyIHx8IHQocGxhY2Vob2xkZXIsIHsgbG5nIH0pfVxuICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICB0cmFuc3BvcnRNb2RlPXt0cmFuc3BvcnRNb2RlfVxuICAgICAgICAgIGlzTW9iaWxlPXtpc01vYmlsZX1cbiAgICAgICAgICBpbnB1dE9uQmx1cj17aW5wdXRPbkJsdXJ9XG4gICAgICAgIC8+XG5cbiAgICAgICAgPFN1Z2dlc3Rpb25zXG4gICAgICAgICAgaGlkZGVuPXshaXNPcGVuIHx8IGlzTW9iaWxlfVxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg9e2hpZ2hsaWdodGVkSW5kZXh9XG4gICAgICAgICAgZ2V0SXRlbVByb3BzPXtnZXRJdGVtUHJvcHN9XG4gICAgICAgICAgZ2V0TWVudVByb3BzPXtnZXRNZW51UHJvcHN9XG4gICAgICAgICAgc3VnZ2VzdGlvbnM9e3N0YXRlLnN1Z2dlc3Rpb25zfVxuICAgICAgICAgIGxuZz17bG5nfVxuICAgICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICAgIHsuLi5iYXNlSXRlbVByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59XG5cbkRUQXV0b3N1Z2dlc3QucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRyYW5zcG9ydE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIFVSTF9QRUxJQVM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29udGV4dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjbGVhckZ1dHVyZVJvdXRlczogUHJvcFR5cGVzLmZ1bmMsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHNvdXJjZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gIHN0b3JlUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgaGFuZGxlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gIHBhdGhPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzdG9wc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgfSksXG4gIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWZQb2ludDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBsb246IFByb3BUeXBlcy5udW1iZXIsXG4gIH0pLFxuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICB9KSxcbiAgY29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuZnVuYyksXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgbW9kZVNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxufTtcblxuRFRBdXRvc3VnZ2VzdC5kZWZhdWx0UHJvcHMgPSB7XG4gIGljb246IHVuZGVmaW5lZCxcbiAgdmFsdWU6ICcnLFxuICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gIGZpbHRlclJlc3VsdHM6IHVuZGVmaW5lZCxcbiAgb25DbGVhcjogdW5kZWZpbmVkLFxuICBsYW5nOiAnZmknLFxuICBzdG9yZVJlZjogdW5kZWZpbmVkLFxuICBoYW5kbGVWaWFQb2ludHM6IHVuZGVmaW5lZCxcbiAgZm9jdXNDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgZ2V0QXV0b1N1Z2dlc3RJY29uczogdW5kZWZpbmVkLFxuICBzb3VyY2VzOiBbXSxcbiAgdGFyZ2V0czogdW5kZWZpbmVkLFxuICBpc01vYmlsZTogZmFsc2UsXG4gIGlzRW1iZWRkZWQ6IGZhbHNlLFxuICBnZW9jb2RpbmdTaXplOiB1bmRlZmluZWQsXG4gIHBhdGhPcHRzOiB7XG4gICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICBzdG9wc1ByZWZpeDogJ3B5c2FraXQnLFxuICB9LFxuICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgbW9iaWxlTGFiZWw6IHVuZGVmaW5lZCxcbiAgaW5wdXRDbGFzc05hbWU6ICcnLFxuICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgZm9udFdlaWdodHM6IHtcbiAgICBtZWRpdW06IDUwMCxcbiAgfSxcbiAgY29sb3JzOiBkZWZhdWx0Q29sb3JzLFxuICByZXF1aXJlZDogZmFsc2UsXG4gIG1vZGVTZXQ6IHVuZGVmaW5lZCxcbiAgc2hvd1Njcm9sbDogZmFsc2UsXG4gIHJlZlBvaW50OiB7fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgICAgPERUQXV0b3N1Z2dlc3Qgey4uLnByb3BzfSAvPlxuICAgIDwvSTE4bmV4dFByb3ZpZGVyPlxuICApO1xufTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ0cnVFcSIsInZhbDEiLCJ2YWwyIiwiZ3Rmc1N0b3BMYXllcnMiLCJ2ZWhpY2xlUmVudGFsTGF5ZXJzIiwibGFiZWxJZFRvR2lkIiwiaWQiLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiaXNEdXBsaWNhdGUiLCJpdGVtMSIsIml0ZW0yIiwicHJvcHMxIiwicHJvcGVydGllcyIsInByb3BzMiIsInR5cGUiLCJvMSIsIm9yaWdpbiIsImQxIiwiZGVzdGluYXRpb24iLCJvMiIsImQyIiwibmFtZSIsImxvY2FsYWRtaW4iLCJpbmNsdWRlcyIsImxheWVyIiwiZ2lkIiwibGFiZWxJZCIsImd0ZnNJZCIsInAxIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsInVuZGVmaW5lZCIsInAyIiwiTWF0aCIsImFicyIsImxhYmVsIiwiYWRkcmVzcyIsIm5vcm1hbGl6ZSIsInN0ciIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzcGxpdFNob3J0TmFtZUF0TGV0dGVycyIsInRlc3RTaG9ydE5hbWVNYXRjaGVzTGluZVdpdGhOdW1iZXJzQW5kTGV0dGVycyIsInRlc3QiLCJMYXllclR5cGUiLCJpc1N0b3AiLCJnZXRMYXllclJhbmsiLCJzb3VyY2UiLCJpbmRleE9mIiwic29ydFNlYXJjaFJlc3VsdHMiLCJsaW5lUmVnZXhwIiwicmVzdWx0cyIsInRlcm0iLCJBcnJheSIsImlzQXJyYXkiLCJpc0xpbmVJZGVudGlmaWVyIiwibm9ybWFsaXplZFRlcm0iLCJpc0xpbmVTZWFyY2giLCJvcmRlcmVkUmVzdWx0cyIsIm9yZGVyQnkiLCJmaWx0ZXIiLCJyZXN1bHQiLCJzaG9ydE5hbWUiLCJjb25maWRlbmNlIiwibWF0Y2giLCJyZXN1bHRQcm9wZXJ0aWVzIiwibWFwIiwiZWxlbWVudCIsIm5vcm1hbGl6ZWRWYWx1ZSIsInJlZHVjZSIsInByZXZpb3VzIiwiY3VycmVudCIsInVuaXFXaXRoIiwiZ2V0U3RvcE5hbWUiLCJzdG9wQ29kZSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiZmlsdGVyTWF0Y2hpbmdUb0lucHV0IiwibGlzdCIsIklucHV0IiwiZmllbGRzIiwiaW5wdXQiLCJ0cmltIiwibXVsdGlXb3JkIiwiaXRlbSIsImZvckVhY2giLCJwTmFtZSIsImdldCIsInNwbGljZSIsImpvaW4iLCJjb25jYXQiLCJyZXBsYWNlIiwiYmluZCIsImZuIiwidGhpc0FyZyIsImFwcGx5IiwiYXJndW1lbnRzIiwidG9TdHJpbmciLCJnZXRQcm90b3R5cGVPZiIsInRvU3RyaW5nVGFnIiwia2luZE9mIiwiY2FjaGUiLCJjcmVhdGUiLCJ0aGluZyIsInNsaWNlIiwia2luZE9mVGVzdCIsInR5cGVPZlRlc3QiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwidmFsIiwiaXNGdW5jdGlvbiIsImlzQXJyYXlCdWZmZXIiLCJpc051bWJlciIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJHIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJ3aW5kb3ciLCJnbG9iYWwiLCJGb3JtRGF0YUN0b3IiLCJGb3JtRGF0YSIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNSZWFkYWJsZVN0cmVhbSIsImlzUmVxdWVzdCIsImlzUmVzcG9uc2UiLCJpc0hlYWRlcnMiLCJvYmoiLCJhbGxPd25LZXlzIiwibCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibGVuIiwia2V5IiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzSFRNTEZvcm0iLCJoYXNPd25Qcm9wZXJ0eSIsInByb3AiLCJpc1JlZ0V4cCIsInJlZHVjZURlc2NyaXB0b3JzIiwicmVkdWNlciIsImRlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiaXNBc3luY0ZuIiwiX3NldEltbWVkaWF0ZSIsInNldEltbWVkaWF0ZVN1cHBvcnRlZCIsInNldEltbWVkaWF0ZSIsInBvc3RNZXNzYWdlU3VwcG9ydGVkIiwicG9zdE1lc3NhZ2UiLCJ0b2tlbiIsInJhbmRvbSIsImNhbGxiYWNrcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJkYXRhIiwic2hpZnQiLCJjYiIsInB1c2giLCJzZXRUaW1lb3V0IiwiYXNhcCIsInF1ZXVlTWljcm90YXNrIiwicHJvY2VzcyIsIm5leHRUaWNrIiwidXRpbHMkMSIsImlzRm9ybURhdGEiLCJraW5kIiwiYXBwZW5kIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImJ1ZmZlciIsImlzQm9vbGVhbiIsImlzRW1wdHlPYmplY3QiLCJpc1JlYWN0TmF0aXZlQmxvYiIsInVyaSIsImlzUmVhY3ROYXRpdmUiLCJmb3JtRGF0YSIsImdldFBhcnRzIiwiaXNTdHJlYW0iLCJwaXBlIiwibWVyZ2UiLCJjYXNlbGVzcyIsInNraXBVbmRlZmluZWQiLCJ0aGlzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJhIiwiYiIsInN0cmlwQk9NIiwiY29udGVudCIsImNoYXJDb2RlQXQiLCJpbmhlcml0cyIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsImFzc2lnbiIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsImxhc3RJbmRleCIsInRvQXJyYXkiLCJhcnIiLCJmb3JFYWNoRW50cnkiLCJfaXRlcmF0b3IiLCJuZXh0IiwiZG9uZSIsInBhaXIiLCJtYXRjaEFsbCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJleGVjIiwiaGFzT3duUHJvcCIsImZyZWV6ZU1ldGhvZHMiLCJzZXQiLCJFcnJvciIsInRvT2JqZWN0U2V0IiwiYXJyYXlPclN0cmluZyIsImRlbGltaXRlciIsImRlZmluZSIsInRvQ2FtZWxDYXNlIiwibSIsInRvVXBwZXJDYXNlIiwibm9vcCIsInRvRmluaXRlTnVtYmVyIiwiZGVmYXVsdFZhbHVlIiwiaXNGaW5pdGUiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJpc0l0ZXJhYmxlIiwiQXhpb3NFcnJvciIsImZyb20iLCJlcnJvciIsImNvZGUiLCJjb25maWciLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJtZXNzYWdlIiwiY2F1c2UiLCJzdGF0dXMiLCJzdXBlciIsImlzQXhpb3NFcnJvciIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwidXRpbHMiLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIiwiQXhpb3NFcnJvciQxIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsInBhdGgiLCJkb3RzIiwicHJlZGljYXRlcyIsInRvRm9ybURhdGEiLCJvcHRpb25zIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJ1c2VCbG9iIiwiQmxvYiIsImNvbnZlcnRWYWx1ZSIsInRvSVNPU3RyaW5nIiwiQnVmZmVyIiwiSlNPTiIsInN0cmluZ2lmeSIsInNvbWUiLCJpc0ZsYXRBcnJheSIsImVsIiwiaW5kZXgiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwicG9wIiwiZW5jb2RlIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwicGFyYW1zIiwiX3BhaXJzIiwiYnVpbGRVUkwiLCJ1cmwiLCJfZW5jb2RlIiwiX29wdGlvbnMiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQxIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJoIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsImxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmciLCJwbGF0Zm9ybSQxIiwiaXNCcm93c2VyIiwiY2xhc3NlcyIsIlVSTFNlYXJjaFBhcmFtcyIsInByb3RvY29scyIsImhhc0Jyb3dzZXJFbnYiLCJkb2N1bWVudCIsIl9uYXZpZ2F0b3IiLCJuYXZpZ2F0b3IiLCJoYXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJwcm9kdWN0IiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJocmVmIiwicGxhdGZvcm0iLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsImFycmF5VG9PYmplY3QiLCJlbnRyaWVzIiwicGFyc2VQcm9wUGF0aCIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiaGVscGVycyIsImlzTm9kZSIsInRvVVJMRW5jb2RlZEZvcm0iLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsImVudiIsInJhd1ZhbHVlIiwicGFyc2VyIiwicGFyc2UiLCJzdHJpbmdpZnlTYWZlbHkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsIkpTT05SZXF1ZXN0ZWQiLCJyZXNwb25zZVR5cGUiLCJzdHJpY3RKU09OUGFyc2luZyIsInBhcnNlUmV2aXZlciIsInRpbWVvdXQiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsIkFjY2VwdCIsIm1ldGhvZCIsImRlZmF1bHRzJDEiLCJpZ25vcmVEdXBsaWNhdGVPZiIsIiRpbnRlcm5hbHMiLCJhc3NlcnRWYWxpZEhlYWRlclZhbHVlIiwiaGVhZGVyIiwidiIsImlzVmFsaWRIZWFkZXJWYWx1ZSIsIm5vcm1hbGl6ZUhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwiZW5kIiwiY2hhckNvZGUiLCJzdHJpcFRyYWlsaW5nQ1JMRiIsIm1hdGNoSGVhZGVyVmFsdWUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJBeGlvc0hlYWRlcnMiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZXRIZWFkZXIiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwiZGVzdCIsImVudHJ5IiwidG9rZW5zIiwidG9rZW5zUkUiLCJwYXJzZVRva2VucyIsImhhcyIsIm1hdGNoZXIiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwiZm9ybWF0Iiwibm9ybWFsaXplZCIsInciLCJjaGFyIiwiZm9ybWF0SGVhZGVyIiwidGFyZ2V0cyIsImFzU3RyaW5ncyIsImdldFNldENvb2tpZSIsImZpcnN0IiwiY29tcHV0ZWQiLCJhY2Nlc3NvciIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwiYWNjZXNzb3JOYW1lIiwibWV0aG9kTmFtZSIsImFyZzEiLCJhcmcyIiwiYXJnMyIsImJ1aWxkQWNjZXNzb3JzIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJBeGlvc0hlYWRlcnMkMSIsInRyYW5zZm9ybURhdGEiLCJmbnMiLCJpc0NhbmNlbCIsIl9fQ0FOQ0VMX18iLCJDYW5jZWxlZEVycm9yJDEiLCJzZXR0bGUiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmxvb3IiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImZyZXEiLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiZmlyc3RTYW1wbGVUUyIsImhlYWQiLCJ0YWlsIiwiY2h1bmtMZW5ndGgiLCJub3ciLCJEYXRlIiwic3RhcnRlZEF0IiwiYnl0ZXNDb3VudCIsInBhc3NlZCIsInJvdW5kIiwic3BlZWRvbWV0ZXIiLCJsYXN0QXJncyIsInRpbWVyIiwidGltZXN0YW1wIiwidGhyZXNob2xkIiwiaW52b2tlIiwiYXJncyIsImNsZWFyVGltZW91dCIsInRocm90dGxlIiwibG9hZGVkIiwidG90YWwiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJwcm9ncmVzcyIsImVzdGltYXRlZCIsImV2ZW50IiwicHJvZ3Jlc3NFdmVudERlY29yYXRvciIsInRocm90dGxlZCIsImFzeW5jRGVjb3JhdG9yIiwiaXNVUkxTYW1lT3JpZ2luIiwiaXNNU0lFIiwiVVJMIiwicHJvdG9jb2wiLCJob3N0IiwicG9ydCIsInVzZXJBZ2VudCIsImNvb2tpZXMiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJzYW1lU2l0ZSIsImNvb2tpZSIsInRvVVRDU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwiYWxsb3dBYnNvbHV0ZVVybHMiLCJpc1JlbGF0aXZlVXJsIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyIsIm5ld0NvbmZpZyIsImF1dGgiLCJidG9hIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInVuZXNjYXBlIiwiZ2V0SGVhZGVycyIsImZvcm1IZWFkZXJzIiwiYWxsb3dlZEhlYWRlcnMiLCJ4c3JmVmFsdWUiLCJ4aHJBZGFwdGVyIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJvbkNhbmNlbGVkIiwidXBsb2FkVGhyb3R0bGVkIiwiZG93bmxvYWRUaHJvdHRsZWQiLCJmbHVzaFVwbG9hZCIsImZsdXNoRG93bmxvYWQiLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJlcnIiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJvbmVycm9yIiwibXNnIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ1cGxvYWQiLCJjYW5jZWwiLCJDYW5jZWxlZEVycm9yIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwicGFyc2VQcm90b2NvbCIsInNlbmQiLCJjb21wb3NlU2lnbmFscyQxIiwic2lnbmFscyIsIkJvb2xlYW4iLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwicmVhc29uIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsImJ5dGVMZW5ndGgiLCJwb3MiLCJyZWFkU3RyZWFtIiwiYXN5bmMiLCJzdHJlYW0iLCJhc3luY0l0ZXJhdG9yIiwicmVhZGVyIiwiZ2V0UmVhZGVyIiwidHJhY2tTdHJlYW0iLCJvblByb2dyZXNzIiwib25GaW5pc2giLCJpdGVyYWJsZSIsInJlYWRCeXRlcyIsIl9vbkZpbmlzaCIsIlJlYWRhYmxlU3RyZWFtIiwicHVsbCIsImNsb3NlIiwibG9hZGVkQnl0ZXMiLCJlbnF1ZXVlIiwicmV0dXJuIiwiaGlnaFdhdGVyTWFyayIsImdsb2JhbEZldGNoQVBJIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiVGV4dEVuY29kZXIiLCJmYWN0b3J5IiwiZmV0Y2giLCJlbnZGZXRjaCIsImlzRmV0Y2hTdXBwb3J0ZWQiLCJpc1JlcXVlc3RTdXBwb3J0ZWQiLCJpc1Jlc3BvbnNlU3VwcG9ydGVkIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJhcnJheUJ1ZmZlciIsInN1cHBvcnRzUmVxdWVzdFN0cmVhbSIsImR1cGxleEFjY2Vzc2VkIiwiYm9keSIsImhhc0NvbnRlbnRUeXBlIiwiZHVwbGV4Iiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsInJlcyIsInJlc29sdmVCb2R5TGVuZ3RoIiwiZ2V0Q29udGVudExlbmd0aCIsInNpemUiLCJfcmVxdWVzdCIsImdldEJvZHlMZW5ndGgiLCJmZXRjaE9wdGlvbnMiLCJfZmV0Y2giLCJjb21wb3NlZFNpZ25hbCIsImNvbXBvc2VTaWduYWxzIiwidG9BYm9ydFNpZ25hbCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiY29udGVudFR5cGVIZWFkZXIiLCJmbHVzaCIsImlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQiLCJyZXNvbHZlZE9wdGlvbnMiLCJjcmVkZW50aWFscyIsImlzU3RyZWFtUmVzcG9uc2UiLCJyZXNwb25zZUNvbnRlbnRMZW5ndGgiLCJyZXNwb25zZURhdGEiLCJzZWVkQ2FjaGUiLCJNYXAiLCJnZXRGZXRjaCIsInNlZWRzIiwic2VlZCIsImtub3duQWRhcHRlcnMiLCJodHRwIiwieGhyIiwiZmV0Y2hBZGFwdGVyLmdldEZldGNoIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXJzIiwiZ2V0QWRhcHRlciIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwic3RhdGUiLCJzIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvcnMkMSIsInZhbGlkYXRvciIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJjb25zb2xlIiwid2FybiIsInNwZWxsaW5nIiwiY29ycmVjdFNwZWxsaW5nIiwiYXNzZXJ0T3B0aW9ucyIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkF4aW9zIiwiaW5zdGFuY2VDb25maWciLCJpbnRlcmNlcHRvcnMiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJjb25maWdPclVybCIsImR1bW15IiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJmaXJzdE5ld2xpbmVJbmRleCIsInNlY29uZE5ld2xpbmVJbmRleCIsInN0YWNrV2l0aG91dFR3b1RvcExpbmVzIiwiYm9vbGVhbiIsImZ1bmN0aW9uIiwiYmFzZVVybCIsIndpdGhYc3JmVG9rZW4iLCJjb250ZXh0SGVhZGVycyIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJ1bnNoaWZ0IiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwicHJvbWlzZSIsImNoYWluIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZ2V0VXJpIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiQXhpb3MkMSIsIkNhbmNlbFRva2VuIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsIl9saXN0ZW5lcnMiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwiYyIsIkNhbmNlbFRva2VuJDEiLCJIdHRwU3RhdHVzQ29kZSIsIkNvbnRpbnVlIiwiU3dpdGNoaW5nUHJvdG9jb2xzIiwiUHJvY2Vzc2luZyIsIkVhcmx5SGludHMiLCJPayIsIkNyZWF0ZWQiLCJBY2NlcHRlZCIsIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsIk5vQ29udGVudCIsIlJlc2V0Q29udGVudCIsIlBhcnRpYWxDb250ZW50IiwiTXVsdGlTdGF0dXMiLCJBbHJlYWR5UmVwb3J0ZWQiLCJJbVVzZWQiLCJNdWx0aXBsZUNob2ljZXMiLCJNb3ZlZFBlcm1hbmVudGx5IiwiRm91bmQiLCJTZWVPdGhlciIsIk5vdE1vZGlmaWVkIiwiVXNlUHJveHkiLCJVbnVzZWQiLCJUZW1wb3JhcnlSZWRpcmVjdCIsIlBlcm1hbmVudFJlZGlyZWN0IiwiQmFkUmVxdWVzdCIsIlVuYXV0aG9yaXplZCIsIlBheW1lbnRSZXF1aXJlZCIsIkZvcmJpZGRlbiIsIk5vdEZvdW5kIiwiTWV0aG9kTm90QWxsb3dlZCIsIk5vdEFjY2VwdGFibGUiLCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJSZXF1ZXN0VGltZW91dCIsIkNvbmZsaWN0IiwiR29uZSIsIkxlbmd0aFJlcXVpcmVkIiwiUHJlY29uZGl0aW9uRmFpbGVkIiwiUGF5bG9hZFRvb0xhcmdlIiwiVXJpVG9vTG9uZyIsIlVuc3VwcG9ydGVkTWVkaWFUeXBlIiwiUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsIkV4cGVjdGF0aW9uRmFpbGVkIiwiSW1BVGVhcG90IiwiTWlzZGlyZWN0ZWRSZXF1ZXN0IiwiVW5wcm9jZXNzYWJsZUVudGl0eSIsIkxvY2tlZCIsIkZhaWxlZERlcGVuZGVuY3kiLCJUb29FYXJseSIsIlVwZ3JhZGVSZXF1aXJlZCIsIlByZWNvbmRpdGlvblJlcXVpcmVkIiwiVG9vTWFueVJlcXVlc3RzIiwiUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIiwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLCJJbnRlcm5hbFNlcnZlckVycm9yIiwiTm90SW1wbGVtZW50ZWQiLCJCYWRHYXRld2F5IiwiU2VydmljZVVuYXZhaWxhYmxlIiwiR2F0ZXdheVRpbWVvdXQiLCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsIlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsIkluc3VmZmljaWVudFN0b3JhZ2UiLCJMb29wRGV0ZWN0ZWQiLCJOb3RFeHRlbmRlZCIsIk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiV2ViU2VydmVySXNEb3duIiwiQ29ubmVjdGlvblRpbWVkT3V0IiwiT3JpZ2luSXNVbnJlYWNoYWJsZSIsIlRpbWVvdXRPY2N1cnJlZCIsIlNzbEhhbmRzaGFrZUZhaWxlZCIsIkludmFsaWRTc2xDZXJ0aWZpY2F0ZSIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZGVmYXVsdCIsImF4aW9zJDEiLCJwcmVmaXgiLCJwIiwiayIsImdldEpzb24iLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQRUxJQVNfVVJMIiwiX29iamVjdFNwcmVhZCIsImxheWVycyIsImZlYXR1cmVzIiwiZ2V0U3RvcHNGcm9tR2VvY29kaW5nIiwic3RvcHMiLCJVUkxfUEVMSUFTX1BMQUNFIiwiZ2lkcyIsInN0b3BTdGF0aW9uTWFwIiwic3RvcCIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJhZGRlbmR1bSIsImxhc3RVcGRhdGVkIiwiZmF2b3VyaXRlSWQiLCJmaWx0ZXJPbGRTZWFyY2hlcyIsIm9sZFNlYXJjaGVzIiwiZHJvcExheWVycyIsIm1hdGNoaW5nT2xkU2VhcmNoZXMiLCJ0YWtlIiwibmV3SXRlbSIsInRpbWV0YWJsZUNsaWNrZWQiLCJhcnJvd0NsaWNrZWQiLCJyb3V0ZUxheWVycyIsImxvY2F0aW9uTGF5ZXJzIiwicGFya2luZ0xheWVycyIsInN0b3BMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRyYW5zcG9ydE1vZGUiLCJzZWFyY2hDb250ZXh0IiwiZmlsdGVyUmVzdWx0cyIsImdlb2NvZGluZ1NpemUiLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwiZ2V0T2xkU2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJsb2NhdGlvbkF3YXJlIiwiVVJMX1BFTElBUyIsImZlZWRJRHMiLCJnZW9jb2RpbmdTZWFyY2hQYXJhbXMiLCJnZW9jb2RpbmdTb3VyY2VzIiwiZ2V0RnV0dXJlUm91dGVzIiwiY2l0eUJpa2VOZXR3b3JrcyIsImFsbFRhcmdldHMiLCJhbGxTb3VyY2VzIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwibW9kZSIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJsb2NhdGlvbkhpc3RvcnkiLCJmZWVkSWRzIiwiaGlzdG9yeSIsInVzZVN0b3BzIiwidXNlU3RhdGlvbnMiLCJzdG9wc0FuZFN0YXRpb25zIiwiZXZlcnkiLCJzdG9wc1N0YXRpb25zIiwiZmlsdGVyRmF2b3VyaXRlU3RvcHMiLCJkZWR1cGVzdG9wcyIsImZlZWRzIiwic3RvcEhpc3RvcnkiLCJmYXZvdXJpdGVSb3V0ZXMiLCJyb3V0ZUhpc3RvcnkiLCJmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbiIsImZsYXR0ZW4iLCJsZWFkaW5nIiwiaTE4biIsImZhbGxiYWNrTG5nIiwicmVzb3VyY2VzIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImFpcnBsYW5lIiwiYXJyaXZhbCIsImJhY2siLCJiaWtlcmVudGFsc3RhdGlvbiIsImJ1cyIsImN1cnJlbnRwb3NpdGlvbiIsImRlbGV0ZSIsImRlcGFydHVyZSIsImZhdm91cml0ZSIsImZlcnJ5Iiwib3dubG9jYXRpb25zIiwibG9hZGluZyIsInJhaWwiLCJzdHJlZXQiLCJzdWJ3YXkiLCJzdGF0aW9uIiwidHJhbSIsInZlbnVlIiwid2hlcmUiLCJwbGFjZSIsImVuIiwiYmlrZXBhcmsiLCJjYXJwYXJrIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwidmVoaWNsZXJlbnRhbHN0YXRpb24iLCJwbCIsInN2IiwiZGVmYXVsdE5TIiwicmVhY3QiLCJ1c2VTdXNwZW5zZSIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJpbml0IiwiZ2V0TG9jYWxhZG1pbiIsInN1Z2dlc3Rpb24iLCJnZXRTdG9wQ29kZSIsImdldE5hbWVMYWJlbCIsIm1lbW9pemUiLCJwbGFpbiIsImVzY2FwZVJlZ0V4cCIsImxvbmdOYW1lIiwiYWdlbmN5IiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsImNsb25lRGVlcCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiaXNQT0lTZWFyY2giLCJnZXRQbGF0Zm9ybSIsImxuZyIsIkdURlMiLCJtb2RlcyIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsImxvY2FsaXR5IiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwidGltZSIsIkRhdGVUaW1lIiwiZnJvbVNlY29uZHMiLCJhcnJpdmVCeSIsImhhc1NhbWUiLCJwbHVzIiwiZGF5cyIsInRvRm9ybWF0IiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiZ2V0TGFiZWwiLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsInN1Z2dlc3Rpb25zIiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0IiwibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUkJDAiLCJuIiwiZyIsImlnbm9yZSIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsIm9mZnNldCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsImNoYXJBdCIsInN1YnN0ciIsInUiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJtYXgiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJvdXRsaW5lIiwic2Nyb2xsVG8iLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJkZXRhaWwiLCJhbmNob3IiLCJ0b2dnbGUiLCJkaXNwYXRjaEV2ZW50IiwiZiIsImQiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJ0YWdOYW1lIiwieSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsIkUiLCJPIiwib2Zmc2V0UGFyZW50IiwiaW5uZXJIZWlnaHQiLCJTIiwiXyIsIkkiLCJNIiwiTCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInB1c2hTdGF0ZSIsInNtb290aFNjcm9sbCIsInRpdGxlIiwibWF0Y2hNZWRpYSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJidXR0b24iLCJtZXRhS2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwiY2xvc2VzdCIsImhvc3RuYW1lIiwicGF0aG5hbWUiLCJoYXNoIiwicmVwbGFjZVN0YXRlIiwiZGVzdHJveSIsIkVsZW1lbnQiLCJfX2NyZWF0ZUJpbmRpbmciLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJsaXN0SXRlbXMiLCJvbkFycm93VXBPckRvd24iLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0Iiwic2VsZWN0ZWRJbmRleCIsInVzZURlYm91bmNlIiwidXNlRWxlbWVudFNpemUiLCJ1c2VSZWYiLCJ3aWR0aCIsImNsaWVudFdpZHRoIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsInVub2JzZXJ2ZSIsImNvbnRhaW5lclJlZiIsImlzVmlzaWJsZSIsInVzZUlzQnJlYWtwb2ludCIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJpbm5lcldpZHRoIiwidXNlT25SZXNpemUiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVJ1bkFmdGVyVXBkYXRlIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwidG9wIiwidW5sb2NrIiwiX19pbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsInVzZVNtb290aFNjcm9sbCIsIkZ1bmN0aW9uIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwib2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiU3VnZ2VzdGlvbiIsIl9yZWYiLCJnZXRJdGVtUHJvcHMiLCJoaWdobGlnaHRlZEluZGV4IiwiaXRlbUluZGV4Iiwic3R5bGVzIiwicmVzdCIsIl9leGNsdWRlZCIsInVzZVRyYW5zbGF0aW9uIiwiUmVhY3QiLCJjbGFzc05hbWUiLCJjeCIsInN1Z2dlc3Rpb25IaWdobGlnaHRlZCIsIlN1Z2dlc3Rpb25JdGVtIiwiaXRlbVNoYXBlIiwiUHJvcFR5cGVzIiwiTk9ERV9FTlYiLCJzaGFwZSIsInN0cmluZyIsInNlbGVjdGVkSWNvbklkIiwiaWNvbkNvbG9yIiwiY29sb3IiLCJib29sIiwiU3VnZ2VzdGlvbnMiLCJfcmVmMiIsImdldE1lbnVQcm9wcyIsImhpZGRlbiIsInJlbmRlckNsZWFySGlzdG9yeUJ1dHRvbiIsImhhbmRsZUNsZWFySGlzdG9yeSIsIl9leGNsdWRlZDIiLCJzdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4iLCJzdWdnZXN0aW9uc0NvbnRhaW5lciIsInN1Z2dlc3Rpb25zTGlzdCIsIm9uQ2xpY2siLCJwcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIm9iamVjdE9mIiwiYXJyYXlPZiIsImRlZmF1bHRQcm9wcyIsIkNsZWFyQnV0dG9uIiwiY2xlYXJJbnB1dCIsIm9uS2V5RG93biIsIkljb24iLCJpbWciLCJwbGFjZWhvbGRlciIsImdldElucHV0UHJvcHMiLCJnZXRMYWJlbFByb3BzIiwiYXJpYUxhYmVsIiwiaW5wdXRSZWYiLCJyZW5kZXJMYWJlbCIsImlzTW9iaWxlIiwiaW5wdXRDbGFzc05hbWUiLCJjbGVhckJ1dHRvbkNvbG9yIiwiYXV0b0ZvY3VzIiwiaW5wdXRPbkJsdXIiLCJjdXJzb3JSZWYiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImNvbnRhaW5lciIsImh0bWxGb3IiLCJ0aGluIiwiaGFzVmFsdWUiLCJvbkJsdXIiLCJvbkNoYW5nZSIsInNlbGVjdGlvblN0YXJ0Iiwib25lT2ZUeXBlIiwib2JqZWN0IiwiTW9iaWxlVmlldyIsImFwcEVsZW1lbnQiLCJvblNlbGVjdGVkSXRlbUNoYW5nZSIsImZvbnRXZWlnaHRzIiwiY2xlYXJPbGRTZWFyY2hlcyIsInN1Z2dlc3Rpb25Qcm9wcyIsImFyaWFQcm9wcyIsIm1vYmlsZUxhYmVsIiwic2hvd1Njcm9sbCIsImRpc3BhdGNoIiwiY29sb3JzIiwiaG9va3MiLCJtb2JpbGVTdHlsZXMiLCJtb2JpbGVOb1Njcm9sbFN0eWxlcyIsImlucHV0SWQiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJyZW5kZXJNb2JpbGUiLCJzZXRIaWdobGlnaHRlZEluZGV4IiwidXNlQ29tYm9ib3giLCJpbnB1dFZhbHVlIiwiaXNPcGVuIiwiY2hhbmdlcyIsInNlbGVjdGVkSXRlbSIsImRlZmF1bHRIaWdobGlnaHRlZEluZGV4Iiwib25JbnB1dFZhbHVlQ2hhbmdlIiwic3RhdGVSZWR1Y2VyIiwib2xkU3RhdGUiLCJzdGF0ZUNoYW5nZVR5cGVzIiwiSW5wdXRLZXlEb3duRXNjYXBlIiwiSW5wdXRLZXlEb3duRW50ZXIiLCJlbnRlclBlbmRpbmciLCJJbnB1dEJsdXIiLCJpdGVtVG9TdHJpbmciLCJzdXBwcmVzc1JlZkVycm9yIiwiYXJpYVJlcXVpcmVkVGV4dCIsIlNlYXJjaEJhcklkIiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwib3ZlcmxheUNsYXNzTmFtZSIsInNob3VsZFJldHVybkZvY3VzQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJwcmltYXJ5IiwiYWNjZXNzaWJsZVByaW1hcnkiLCJob3ZlciIsIm1lZGl1bSIsInRhYkluZGV4IiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInNlYXJjaFJlZHVjZXIiLCJhY3Rpb24iLCJzaG93T3duUGxhY2VzIiwicGVuZGluZ1NlbGVjdGlvbiIsImlzQ2xlYXJlZCIsImluaXRpYWxTdGF0ZSIsImlzTWVudU9wZW4iLCJwb3NpdGlvbnMiLCJEVEF1dG9zdWdnZXN0Iiwib25TZWxlY3QiLCJpY29uIiwib25DbGVhciIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsInN0b3JlUmVmIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwibW9kZVNldCIsImlzRW1iZWRkZWQiLCJ1c2VSZWR1Y2VyIiwiZmV0Y2hTdWdnZXN0aW9ucyIsImlzTG9jYXRpb25TZWFyY2giLCJuZXdUYXJnZXRzIiwiZ2V0TmV3VGFyZ2V0cyIsIm93blBsYWNlcyIsInVzZUFsbCIsImV4ZWN1dGVTZWFyY2giLCJzZWFyY2hSZXN1bHQiLCJuZXdTdWdnZXN0aW9ucyIsInRyYW5zbGF0ZWRTdWdnZXN0aW9uIiwic2VsZWN0U3VnZ2VzdGlvbiIsImJsdXIiLCJzZWxlY3RJdGVtIiwib3Blbk1lbnUiLCJjbG9zZU1lbnUiLCJJdGVtQ2xpY2siLCJJbnB1dENsaWNrIiwib25Jc09wZW5DaGFuZ2UiLCJwZW5kaW5nRW50ZXIiLCJiYXNlSXRlbVByb3BzIiwiYXJpYUZhdm91cml0ZVN0cmluZyIsImFyaWFMYWJlbFRleHQiLCJnZXRBcmlhUHJvcHMiLCJhcmlhQmFySWQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYVN1Z2dlc3Rpb25MZW4iLCJjb3VudCIsInNlbGVjdGlvbiIsIkZyYWdtZW50IiwibW9iaWxlQ2xlYXJPbGRTZWFyY2hlcyIsImNsZWFyRnV0dXJlUm91dGVzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJkZWZhdWx0Q29sb3JzIiwiSTE4bmV4dFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoieXlEQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2YsRUFBRyxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3RILEVBQUtELEVBQVFDLEVBQ2IsQ0NOQSxTQUFTSyxFQUFjQyxHQUNyQixJQUFJQyxFQ0ZOLFNBQXFCRCxFQUFHRSxHQUN0QixHQUFJLFVBQVlULEVBQVFPLEtBQU9BLEVBQUcsT0FBT0EsRUFDekMsSUFBSUcsRUFBSUgsRUFBRUwsT0FBT1MsYUFDakIsUUFBUyxJQUFNRCxFQUFHLENBQ2hCLElBQUlGLEVBQUlFLEVBQUVFLEtBQUtMLEVBQUdFLEdBQUssV0FDdkIsR0FBSSxVQUFZVCxFQUFRUSxHQUFJLE9B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
|